|
|
- <app-users>
- <div class="buckets">
- <table class="table">
- <thead>
- <tr class="table__tr">
- <th class="table__th">
- Email
- </th>
- <th class="table__th">
- Display Name
- </th>
- <th class="table__th" colspan="2">
- Roles
- </th>
- </tr>
- </thead>
- <tbody>
- <tr class="table__tr" each={ user in state.users }>
-
- <td class="table__td">
- { user.email }
- </td>
-
- <td class="table__td">
- { user.display_name }
- </td>
-
- <td class="table__td">
- <div if={ user.roles && user.roles.indexOf('admin') >= 0 }>
- Admin
- <svg class="icon" aria-hidden="true">
- <use xlink:href="/symbol-defs.svg#icon-check"></use>
- </svg>
- </div>
- </td>
-
- <!-- actions -->
- <td class="table__td right">
- <app-sidebar-button class="m-bottom-0 m-right-3" event="app-users-form-open" selector="app-users-form" data={ user }>
- <svg class="icon" aria-hidden="true">
- <use xlink:href="/symbol-defs.svg#icon-edit"></use>
- </svg>
- </app-sidebar-button>
- <button class="button button--small m-bottom-0" type="button" onclick={ (event) => { handleDelete(event, user) } }>
- <svg class="icon" aria-hidden="true">
- <use xlink:href="/symbol-defs.svg#icon-delete"></use>
- </svg>
- </button>
- </td>
- </tr>
- </tbody>
- </table>
-
- <app-modal id="user-delete-confirm">
- <span slot="title">
- <svg class="icon fill-text-contrast" aria-hidden="true">
- <use xlink:href="/symbol-defs.svg#icon-close"></use>
- </svg>
- Delete
- </span>
- </app-modal>
-
- <div class="grid" if={ state.maxLength > state.users.length }>
- <div class="col-12">
- <div class="buckets__more">
- <button type="button" class="button" onclick={ handleClick }>
- More
- <svg class="icon" aria-hidden="true">
- <use xlink:href="/symbol-defs.svg#icon-arrow-down"></use>
- </svg>
- </button>
- </div>
- </div>
- </div>
-
- <app-loading loading={ state.loading }></app-loading>
-
- </div>
- <script>
-
- import axios from 'axios'
- import remove from 'lodash.remove'
-
- import * as riot from 'riot'
- import AppModal from './modal.riot'
-
- riot.register('app-modal', AppModal)
- riot.mount('app-modal')
-
- /**
- *
- *
- *
- * @author Björn Hase
- *
- */
-
- export default {
-
- state: {
- users: [],
- maxLength: 0
- },
-
- onBeforeMount() {
- this.fetch()
- },
-
- /**
- *
- * @param {[type]} event
- * @param {[type]} user
- * @return {[type]}
- *
- */
- handleUpdate(event, user) {
- const customEvent = new CustomEvent('app-users-form-open', {
- 'detail': user
- })
-
- document.querySelector('app-users-form').dispatchEvent(customEvent);
- },
-
- handleDelete(event, user) {
-
- event.preventDefault()
-
- const customEvent = new CustomEvent('open', {
- 'detail': {
- 'confirm': () => {
-
- this.state.loading = true
-
- axios.delete('/api/users/v1/' + user._id)
- .then((response) => {
-
- // removing from buckets
- remove(this.state.users, function(u) {
- return u._id === user._id
- })
-
- }).catch((error) => {
-
- }).then(() => {
- this.state.loading = false
- this.update()
- })
- },
-
- // @TODO find a better solution to create body text
- 'body': 'Do you want delete ' + user.email + '?'
- }
- })
-
- this.$('#user-delete-confirm').dispatchEvent(customEvent);
- },
-
- /**
- * getting all buckets
- *
- *
- */
- fetch() {
- axios.get('/api/users/v1').then((response) => {
- this.state.users = response.data.data
- this.update()
- })
- }
- }
-
- </script>
- </app-users>
|