Remove unused templates
This commit is contained in:
parent
4456960beb
commit
d17df2aaad
@ -1,60 +0,0 @@
|
|||||||
import { shallowMount } from '@vue/test-utils'
|
|
||||||
|
|
||||||
import MembersList from '../members_list'
|
|
||||||
|
|
||||||
describe('MembersList', () => {
|
|
||||||
const members = [
|
|
||||||
{
|
|
||||||
name: 'Luke Skywalker',
|
|
||||||
num_env: 2,
|
|
||||||
status: 'active',
|
|
||||||
role: 'developer',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Chewie',
|
|
||||||
num_env: 3,
|
|
||||||
status: 'pending',
|
|
||||||
role: 'admin',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
const role_choices = [
|
|
||||||
{ display_name: 'Developer', name: 'developer' },
|
|
||||||
{ display_name: 'Admin', name: 'admin' },
|
|
||||||
]
|
|
||||||
const status_choices = [
|
|
||||||
{ display_name: 'Active', name: 'active' },
|
|
||||||
{ display_name: 'Pending', name: 'pending' },
|
|
||||||
]
|
|
||||||
|
|
||||||
const createWrapper = () =>
|
|
||||||
shallowMount(MembersList, {
|
|
||||||
propsData: {
|
|
||||||
members,
|
|
||||||
role_choices,
|
|
||||||
status_choices,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should sort by name by default', () => {
|
|
||||||
const wrapper = createWrapper()
|
|
||||||
const listedMembers = wrapper.vm.searchedList
|
|
||||||
const memberNames = listedMembers.map(member => member.name)
|
|
||||||
expect(memberNames).toEqual(['Chewie', 'Luke Skywalker'])
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should reverse sort by name when updated with Name', () => {
|
|
||||||
const wrapper = createWrapper()
|
|
||||||
wrapper.vm.updateSort('Name')
|
|
||||||
const listedMembers = wrapper.vm.searchedList
|
|
||||||
const memberNames = listedMembers.map(member => member.name)
|
|
||||||
expect(memberNames).toEqual(['Luke Skywalker', 'Chewie'])
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should sort by number of environments when environments selected', () => {
|
|
||||||
const wrapper = createWrapper()
|
|
||||||
wrapper.vm.updateSort('Environments')
|
|
||||||
const listedMembers = wrapper.vm.searchedList
|
|
||||||
const memberEnvs = listedMembers.map(member => member.num_env)
|
|
||||||
expect(memberEnvs).toEqual([2, 3])
|
|
||||||
})
|
|
||||||
})
|
|
@ -1,152 +0,0 @@
|
|||||||
import {
|
|
||||||
compose,
|
|
||||||
sortBy,
|
|
||||||
reverse,
|
|
||||||
indexBy,
|
|
||||||
partial,
|
|
||||||
prop,
|
|
||||||
pipe,
|
|
||||||
toLower,
|
|
||||||
} from 'ramda'
|
|
||||||
|
|
||||||
const search = (query, members) => {
|
|
||||||
if (query === '' || query === 'all') {
|
|
||||||
return members
|
|
||||||
} else {
|
|
||||||
const normalizedQuery = query.toLowerCase()
|
|
||||||
return members.filter(member =>
|
|
||||||
member.name.toLowerCase().includes(normalizedQuery)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const filterByStatus = (status, statusesByDisplayName, members) => {
|
|
||||||
const getStatusFromDisplayName = _status =>
|
|
||||||
statusesByDisplayName[_status].name
|
|
||||||
|
|
||||||
if (status === '' || status === 'all') {
|
|
||||||
return members
|
|
||||||
} else {
|
|
||||||
return members.filter(
|
|
||||||
member => getStatusFromDisplayName(member.status) === status
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const filterByRole = (role, rolesByDisplayname, members) => {
|
|
||||||
const getRoleNameFromDisplayName = _role => rolesByDisplayname[_role].name
|
|
||||||
|
|
||||||
if (role === '' || role === 'all') {
|
|
||||||
return members
|
|
||||||
} else {
|
|
||||||
return members.filter(
|
|
||||||
member => getRoleNameFromDisplayName(member.role) === role
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const sort = (sortInfo, members) => {
|
|
||||||
if (sortInfo.columnName === '') {
|
|
||||||
return members
|
|
||||||
} else {
|
|
||||||
const sortColumn = sortInfo.columns[sortInfo.columnName]
|
|
||||||
const sortedMembers = sortColumn.sortFunc(sortColumn.attr, members)
|
|
||||||
|
|
||||||
return sortInfo.isAscending ? sortedMembers : reverse(sortedMembers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'members-list',
|
|
||||||
|
|
||||||
props: {
|
|
||||||
members: Array,
|
|
||||||
role_choices: {
|
|
||||||
type: Array,
|
|
||||||
default: () => [],
|
|
||||||
},
|
|
||||||
status_choices: {
|
|
||||||
type: Array,
|
|
||||||
default: () => [],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
data: function() {
|
|
||||||
const alphabeticalSort = (attr, members) => {
|
|
||||||
const lowercaseProp = compose(
|
|
||||||
toLower,
|
|
||||||
prop(attr)
|
|
||||||
)
|
|
||||||
return sortBy(lowercaseProp, members)
|
|
||||||
}
|
|
||||||
|
|
||||||
const numericSort = (attr, members) => sortBy(prop(attr), members)
|
|
||||||
|
|
||||||
const columns = [
|
|
||||||
{
|
|
||||||
displayName: 'Name',
|
|
||||||
attr: 'name',
|
|
||||||
sortFunc: alphabeticalSort,
|
|
||||||
width: '50%',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: 'Environments',
|
|
||||||
attr: 'num_env',
|
|
||||||
sortFunc: numericSort,
|
|
||||||
class: 'table-cell--align-center',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: 'Status',
|
|
||||||
attr: 'status',
|
|
||||||
sortFunc: alphabeticalSort,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
displayName: 'Portfolio Role',
|
|
||||||
attr: 'role',
|
|
||||||
sortFunc: alphabeticalSort,
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
const defaultSortColumn = 'Name'
|
|
||||||
|
|
||||||
return {
|
|
||||||
searchValue: '',
|
|
||||||
status: '',
|
|
||||||
statusesByDisplayName: indexBy(prop('display_name'), this.status_choices),
|
|
||||||
role: '',
|
|
||||||
rolesByDisplayName: indexBy(prop('display_name'), this.role_choices),
|
|
||||||
sortInfo: {
|
|
||||||
columnName: defaultSortColumn,
|
|
||||||
isAscending: true,
|
|
||||||
columns: indexBy(prop('displayName'), columns),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
computed: {
|
|
||||||
searchedList: function() {
|
|
||||||
return pipe(
|
|
||||||
partial(search, [this.searchValue]),
|
|
||||||
partial(filterByStatus, [this.status, this.statusesByDisplayName]),
|
|
||||||
partial(filterByRole, [this.role, this.rolesByDisplayName]),
|
|
||||||
partial(sort, [this.sortInfo])
|
|
||||||
)(this.members)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
updateSort: function(columnName) {
|
|
||||||
// clicking a column twice toggles ascending / descending
|
|
||||||
if (columnName === this.sortInfo.columnName) {
|
|
||||||
this.sortInfo.isAscending = !this.sortInfo.isAscending
|
|
||||||
}
|
|
||||||
|
|
||||||
this.sortInfo.columnName = columnName
|
|
||||||
},
|
|
||||||
getColumns: function() {
|
|
||||||
return Object.values(this.sortInfo.columns)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
template: '<div></div>',
|
|
||||||
}
|
|
@ -30,7 +30,6 @@ import BudgetChart from './components/charts/budget_chart'
|
|||||||
import SpendTable from './components/tables/spend_table'
|
import SpendTable from './components/tables/spend_table'
|
||||||
import EnvironmentsTable from './components/tables/application_environments'
|
import EnvironmentsTable from './components/tables/application_environments'
|
||||||
import TaskOrderList from './components/tables/task_order_list.js'
|
import TaskOrderList from './components/tables/task_order_list.js'
|
||||||
import MembersList from './components/members_list'
|
|
||||||
import LocalDatetime from './components/local_datetime'
|
import LocalDatetime from './components/local_datetime'
|
||||||
import ConfirmationPopover from './components/confirmation_popover'
|
import ConfirmationPopover from './components/confirmation_popover'
|
||||||
import { isNotInVerticalViewport } from './lib/viewport'
|
import { isNotInVerticalViewport } from './lib/viewport'
|
||||||
@ -69,7 +68,6 @@ const app = new Vue({
|
|||||||
SpendTable,
|
SpendTable,
|
||||||
EnvironmentsTable,
|
EnvironmentsTable,
|
||||||
TaskOrderList,
|
TaskOrderList,
|
||||||
MembersList,
|
|
||||||
LocalDatetime,
|
LocalDatetime,
|
||||||
EditEnvironmentRole,
|
EditEnvironmentRole,
|
||||||
EditApplicationRoles,
|
EditApplicationRoles,
|
||||||
|
@ -1,90 +0,0 @@
|
|||||||
{% extends "portfolios/applications/base.html" %}
|
|
||||||
|
|
||||||
{% from "components/empty_state.html" import EmptyState %}
|
|
||||||
{% from "components/icon.html" import Icon %}
|
|
||||||
|
|
||||||
{% set secondary_breadcrumb = 'portfolios.applications.team_management.title' | translate({ "application_name": application.name }) %}
|
|
||||||
|
|
||||||
{% block application_content %}
|
|
||||||
|
|
||||||
<div class='subheading'>{{ 'portfolios.applications.team_management.subheading' | translate }}</div>
|
|
||||||
|
|
||||||
{% if not portfolio.members %}
|
|
||||||
|
|
||||||
{% set user_can_invite = user_can(permissions.CREATE_PORTFOLIO_USERS) %}
|
|
||||||
|
|
||||||
{{ EmptyState(
|
|
||||||
'There are currently no members in this portfolio',
|
|
||||||
action_label='Invite a new Member' if user_can_invite else None,
|
|
||||||
action_href='/members/new' if user_can_invite else None,
|
|
||||||
sub_message=None if user_can_invite else 'Please contact your JEDI Cloud portfolio administrator to invite new members.',
|
|
||||||
icon='avatar'
|
|
||||||
) }}
|
|
||||||
|
|
||||||
|
|
||||||
{% else %}
|
|
||||||
|
|
||||||
{% include "fragments/flash.html" %}
|
|
||||||
|
|
||||||
<members-list
|
|
||||||
inline-template
|
|
||||||
id="search-template"
|
|
||||||
class='member-list'
|
|
||||||
v-bind:members='{{ members | tojson}}'>
|
|
||||||
<div class='responsive-table-wrapper panel'>
|
|
||||||
<table v-cloak v-if='searchedList && searchedList.length' class="atat-table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th v-for="col in getColumns()" @click="updateSort(col.displayName)" :width="col.width" :class="col.class" scope="col">
|
|
||||||
!{ col.displayName }
|
|
||||||
<span class="sorting-direction" v-if="col.displayName === sortInfo.columnName && sortInfo.isAscending">
|
|
||||||
{{ Icon("caret_down") }}
|
|
||||||
</span>
|
|
||||||
<span class="sorting-direction" v-if="col.displayName === sortInfo.columnName && !sortInfo.isAscending">
|
|
||||||
{{ Icon("caret_up") }}
|
|
||||||
</span>
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
<tr v-for='member in searchedList'>
|
|
||||||
<td>
|
|
||||||
<a :href="member.edit_link" class="icon-link icon-link--large" v-html="member.name"></a>
|
|
||||||
</td>
|
|
||||||
<td class="table-cell--align-center" v-if='member.num_env'>
|
|
||||||
<span v-html="member.num_env"></span>
|
|
||||||
</td>
|
|
||||||
<td class='table-cell--shrink' v-else>
|
|
||||||
<span class="label label--info">No Environment Access</span>
|
|
||||||
</td>
|
|
||||||
<td v-html="member.status"></td>
|
|
||||||
<td v-html="member.role"></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="add-member-link" colspan=4>
|
|
||||||
<a class="icon-link" href="{{ url_for('portfolios.new_member', portfolio_id=portfolio.id) }}">
|
|
||||||
Add A New Member
|
|
||||||
{{ Icon('plus') }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div v-else>
|
|
||||||
{{ EmptyState(
|
|
||||||
'No members found.',
|
|
||||||
action_label=None,
|
|
||||||
action_href=None,
|
|
||||||
sub_message='Please try a different search.',
|
|
||||||
icon=None
|
|
||||||
) }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</members-list>
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
|
|
@ -274,9 +274,6 @@ portfolios:
|
|||||||
existing_application_title: '{application_name} Application Settings'
|
existing_application_title: '{application_name} Application Settings'
|
||||||
new_application_title: New Application
|
new_application_title: New Application
|
||||||
settings_heading: Application Settings
|
settings_heading: Application Settings
|
||||||
team_management:
|
|
||||||
subheading: Team Management
|
|
||||||
title: '{application_name} Team Management'
|
|
||||||
team_settings:
|
team_settings:
|
||||||
blank_slate:
|
blank_slate:
|
||||||
action_label: Invite a new team member
|
action_label: Invite a new team member
|
||||||
|
Loading…
x
Reference in New Issue
Block a user