Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Coscine
frontend
apps
UserManagement
Commits
b411a660
Commit
b411a660
authored
Sep 24, 2020
by
David Schimmel
Browse files
Merge branch 'Topic/1036-userManagement' into 'Product/883-userManagement'
New: Add members from other projects See merge request coscine/app/usermanagement!36
parents
1e267921
36cc8551
Changes
6
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
package-lock.json
View file @
b411a660
{
"name": "@coscine/usermanagement",
"version": "1.6.
0
",
"version": "1.6.
1
",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
...
...
@@ -2390,16 +2390,6 @@
"integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==",
"dev": true
},
"@types/mini-css-extract-plugin": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/@types/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.1.tgz",
"integrity": "sha512-+mN04Oszdz9tGjUP/c1ReVwJXxSniLd7lF++sv+8dkABxVNthg6uccei+4ssKxRHGoMmPxdn7uBdJWONSJGTGQ==",
"dev": true,
"optional": true,
"requires": {
"@types/webpack": "*"
}
},
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
...
...
@@ -2751,6 +2741,17 @@
"integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
"dev": true
},
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"dev": true,
"optional": true,
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
"array-union": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
...
...
@@ -2789,6 +2790,34 @@
}
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"dir-glob": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
...
...
@@ -2835,6 +2864,26 @@
}
}
},
"fork-ts-checker-webpack-plugin-v5": {
"version": "npm:fork-ts-checker-webpack-plugin@5.2.0",
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.0.tgz",
"integrity": "sha512-NEKcI0+osT5bBFZ1SFGzJMQETjQWZrSvMO1g0nAR/w0t328Z41eN8BJEIZyFCl2HsuiJpa9AN474Nh2qLVwGLQ==",
"dev": true,
"optional": true,
"requires": {
"@babel/code-frame": "^7.8.3",
"@types/json-schema": "^7.0.5",
"chalk": "^4.1.0",
"cosmiconfig": "^6.0.0",
"deepmerge": "^4.2.2",
"fs-extra": "^9.0.0",
"memfs": "^3.1.2",
"minimatch": "^3.0.4",
"schema-utils": "2.7.0",
"semver": "^7.3.2",
"tapable": "^1.0.0"
}
},
"glob-parent": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
...
...
@@ -2872,6 +2921,13 @@
"slash": "^2.0.0"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
...
...
@@ -2925,12 +2981,29 @@
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true
},
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
"dev": true,
"optional": true
},
"slash": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"to-regex-range": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
...
...
@@ -3118,6 +3191,17 @@
"unique-filename": "^1.1.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"cliui": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
...
...
@@ -3274,6 +3358,13 @@
"slash": "^2.0.0"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
...
...
@@ -3315,6 +3406,18 @@
"graceful-fs": "^4.1.6"
}
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
...
...
@@ -3432,6 +3535,16 @@
"strip-ansi": "^6.0.0"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"terser-webpack-plugin": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz",
...
...
@@ -3465,6 +3578,18 @@
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.0.0-beta.8",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.8.tgz",
"integrity": "sha512-oouKUQWWHbSihqSD7mhymGPX1OQ4hedzAHyvm8RdyHh6m3oIvoRF+NM45i/bhNOlo8jCnuJhaSUf/6oDjv978g==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
}
},
"wrap-ansi": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
...
...
@@ -9760,91 +9885,6 @@
}
}
},
"fork-ts-checker-webpack-plugin-v5": {
"version": "npm:fork-ts-checker-webpack-plugin@5.0.14",
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.0.14.tgz",
"integrity": "sha512-iwRdjgZx1Ll0DAMhmtOF4ffoICpiUxOqOHLrbIHmeCtZiwCrL/qscm+EXOJyzj3a9X8hLRLDEHy9FOyD6Gm42g==",
"dev": true,
"optional": true,
"requires": {
"@babel/code-frame": "^7.8.3",
"@types/json-schema": "^7.0.5",
"chalk": "^4.1.0",
"cosmiconfig": "^6.0.0",
"deepmerge": "^4.2.2",
"fs-extra": "^9.0.0",
"memfs": "^3.1.2",
"minimatch": "^3.0.4",
"schema-utils": "2.7.0",
"semver": "^7.3.2",
"tapable": "^1.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"dev": true,
"optional": true,
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
"dev": true,
"optional": true
},
"supports-color": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"form-data": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
...
...
@@ -21690,79 +21730,6 @@
}
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.0.0-beta.5",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.5.tgz",
"integrity": "sha512-ciWfzNefqWlmzKznCWY9hl+fPP4KlQ0A9MtHbJ/8DpyY+dAM8gDrjufIdxwTgC4szE4EZC3A6ip/BbrqM84GqA==",
"dev": true,
"optional": true,
"requires": {
"@types/mini-css-extract-plugin": "^0.9.1",
"chalk": "^3.0.0",
"hash-sum": "^2.0.0",
"loader-utils": "^1.2.3",
"merge-source-map": "^1.1.0",
"source-map": "^0.6.1"
},
"dependencies": {
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"dev": true,
"optional": true,
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"supports-color": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-loading-overlay": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/vue-loading-overlay/-/vue-loading-overlay-3.3.3.tgz",
...
...
src/UserManagementApp.vue
View file @
b411a660
<
template
>
<div
id=
"users"
>
<
h4
style=
"text-align: left;"
>
{{
$t
(
'
userManagement
'
)
}}
:
</h4
>
<
coscine-headline
:headline=
"$t('userManagement')"
></coscine-headline
>
<component
:is=
"currentUserComponent"
v-bind:parentId=
"this.projectId"
/>
</div>
</
template
>
...
...
@@ -9,6 +9,7 @@
import
Vue
from
'
vue
'
;
import
UserManagement
from
'
./components/UserManagement.vue
'
;
import
{
GuidUtil
}
from
'
@coscine/app-util
'
;
import
{
CoscineHeadline
}
from
'
@coscine/component-library
'
;
export
default
Vue
.
extend
({
name
:
'
users
'
,
...
...
@@ -23,6 +24,7 @@ export default Vue.extend({
},
components
:
{
UserManagement
,
CoscineHeadline
,
},
});
</
script
>
...
...
@@ -35,8 +37,4 @@ export default Vue.extend({
text-align
:
center
;
color
:
#2c3e50
;
}
#users
h4
{
color
:
#000
;
font-family
:
"Avenir"
,
Helvetica
,
Arial
,
sans-serif
;
}
</
style
>
src/components/MembersTable.vue
0 → 100644
View file @
b411a660
<
template
>
<div
class=
"rolesTable"
>
<b-table
:id=
"id"
:fields=
"headers"
:items=
"items"
:busy=
"busy"
:locale=
"$i18n.locale"
:filter=
"filter"
:sort-by.sync=
"sortBy"
:sort-desc.sync=
"sortDesc"
:show-empty=
"true"
:empty-text=
"emptyText"
:empty-filtered-text=
"emptyFilteredText"
fixed
sticky-header=
"100%"
no-border-collapse
sort-icon-right
striped
bordered
outlined
hover
head-variant=
"dark"
@
filtered=
"onFiltered"
>
<div
slot=
"table-busy"
class=
"text-center text-danger my-2"
>
<b-spinner
class=
"align-middle"
></b-spinner>
<strong
style=
"margin-left: 1%;"
>
{{
$t
(
'
loading
'
)
}}
</strong>
</div>
<template
v-slot:cell(roleName)=
"row"
>
<b-form-select
v-model=
"row.item.role.id"
:options=
"roles"
v-on:change=
"role(row.item)"
:disabled=
"!row.item.enabledControls"
/>
</
template
>
<
template
v-slot:cell(actions)=
"row"
>
<coscine-delete
:btnText=
"removeText"
@
delete=
"deleteItem(row.item)"
></coscine-delete>
</
template
>
</b-table>
</div>
</template>
<
script
lang=
"ts"
>
import
Vue
from
'
vue
'
;
import
{
CoscineDelete
}
from
'
@coscine/component-library
'
;
export
default
Vue
.
extend
({
name
:
'
MembersTable
'
,
components
:
{
CoscineDelete
,
},
data
()
{
return
{
sortBy
:
'
lastName
'
,
sortDesc
:
false
,
filteredRows
:
0
,
headers
:
[
{
label
:
this
.
$t
(
'
firstName
'
),
key
:
'
firstName
'
,
sortable
:
true
,
},
{
label
:
this
.
$t
(
'
lastName
'
),
key
:
'
lastName
'
,
sortable
:
true
,
},
{
label
:
this
.
$t
(
'
email
'
),
key
:
'
emailAddress
'
,
sortable
:
true
,
},
{
label
:
this
.
$t
(
'
role
'
),
key
:
'
roleName
'
,
sortable
:
true
,
},
{
label
:
this
.
$t
(
'
actions
'
),
key
:
'
actions
'
,
sortable
:
true
,
},
],
};
},
props
:
{
id
:
String
,
items
:
{},
filter
:
String
,
busy
:
Boolean
,
emptyText
:
String
,
emptyFilteredText
:
String
,
removeText
:
String
,
roles
:
{},
},
methods
:
{
onFiltered
(
filteredItems
:
any
)
{
this
.
filteredRows
=
filteredItems
.
length
;
this
.
$emit
(
'
tableFilteredRows
'
,
this
.
filteredRows
);
},
deleteItem
(
item
:
any
)
{
this
.
$emit
(
'
selectedItem
'
,
item
);
},
role
(
item
:
any
)
{
this
.
$emit
(
'
setRole
'
,
item
);
},
},
});
</
script
>
<
style
>
.rolesTable
{
max-height
:
65vh
;
table-layout
:
fixed
;
border
:
1px
solid
#e5e5e5
;
height
:
100vh
;
}
.rolesTable
td
,
th
{
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
vertical-align
:
middle
;
text-align
:
center
;
}
</
style
>
\ No newline at end of file
src/components/UserManagement.vue
View file @
b411a660
...
...
@@ -2,10 +2,10 @@
<div
class=
"UserManagement"
>
<b-container>
<b-row
align-h=
"between"
>
<b-col
md=
"6
"
align-self=
"start"
>
<b-col
sm=
"10
"
align-self=
"start"
>
<div
class=
"adaptAlign"
>
<b-row>
<b-col
sm=
"5"
@
keydown.enter.prevent.self=
""
>
<b-col
sm=
"5"
@
keydown.enter.prevent.self=
""
id=
"firstCol"
>
<v-select
v-model=
"searchString"
:class=
"
{'adaptSelect':true, 'no-results':(queriedUsers.length === 0)}" :placeholder="$t('searchUserPlaceholder')" :options="queriedUsers" :filterBy="filterMock" @change="validateSelection()" @input="setNewRole" @search="triggerFetchOptions" :selectable="option => !option.hasProjectRole">
<template
v-if=
"searchString !== ''"
slot=
"no-options"
>
{{
$t
(
'
noUserOptions
'
)
}}
...
...
@@ -25,7 +25,7 @@
</
template
>
</v-select>
</b-col>
<b-col
sm=
"
3
"
>
<b-col
sm=
"
2"
id=
"secondCol
"
>
<b-form-select
v-model=
"newUserRole.role.id"
:options=
"roles"
...
...
@@ -33,13 +33,14 @@
@
input=
"validateSelection()"
>
</b-form-select>
</b-col>
<b-col
sm=
"4"
>
<button
type=
"button"
class=
"btn btn-secondary"
name=
"setRole"
v-on:click=
"addUser(newUserRole)"
:disabled=
"!selectionIsValid"
>
{{ $t('setRole') }}
</button>
<b-col
sm=
"5"
id=
"thirdCol"
>
<b-button
name=
"setRole"
v-on:click=
"addUser(newUserRole)"
:disabled=
"!selectionIsValid"
>
{{ $t('setRole') }}
</b-button>
<b-button
name=
"importUser"
v-on:click=
"$bvModal.show('importUserModal')"
>
{{ $t('importUserButton') }}
</b-button>
</b-col>
</b-row>
</div>
</b-col>
<b-col
m
d=
"4"
offset-md
=
"2"
align-self=
"end"
@
keydown.enter.prevent.self=
""
>
<b-col
s
m=
"2"
align-self=
"end"
@
keydown.enter.prevent.self=
""
id=
"forthCol"
>
<b-input-group>
<b-form-input
v-model=
"filter"
...
...
@@ -53,78 +54,81 @@
<br>
<b-row>
<b-col>
<
b
-table
<
members
-table
id=
"userTable"
:fields=
"headers"
:items=
"projectRoles"
:busy=
"isBusy"
:locale=
"$i18n.locale"
:filter=
"filter"
:per-page=
"perPage"
:current-page=
"currentPage"
:sort-by.sync=
"sortBy"
:sort-desc.sync=
"sortDesc"
:show-empty=
"true"
:empty-text=
"$t('emptyTableText')"
:empty-filtered-text=
"$t('emptyFilterText')"
sort-icon-right
striped
bordered
outlined
hover
head-variant=
"dark"
class=
"adaptTable"
@
filtered=
"onFiltered"
>
<div
slot=
"table-busy"
class=
"text-center text-danger my-2"
>
<b-spinner
class=
"align-middle"
></b-spinner>
<strong
style=
"margin-left: 1%;"
>
{{ $t('loading') }}
</strong>
</div>
<
template
v-slot:cell(roleName)=
"row"
>
<b-form-select
v-model=
"row.item.role.id"
:options=
"roles"
v-on:change=
"setRole(row.item)"
:disabled=
"!row.item.enabledControls"
/>
</
template
>
<
template
v-slot:cell(actions)=
"row"
>
<button
type=
"button"
class=
"btn btn-secondary deleteUser"
:disabled=
"!row.item.enabledControls"
name=
"deleteUser"
v-on:click=
"prepareDeletion(row.item)"
>
{{
$t
(
'
deleteUser
'
)
}}
</button>
</
template
>
</b-table>
</b-col>
</b-row>
<b-row>
<b-col
id=
"perPageSelection"
sm=
"2"
>