diff --git a/js/components/forms/edit_environment_role.js b/js/components/forms/edit_environment_role.js
new file mode 100644
index 00000000..30f9460e
--- /dev/null
+++ b/js/components/forms/edit_environment_role.js
@@ -0,0 +1,58 @@
+import FormMixin from '../../mixins/form'
+import textinput from '../text_input'
+import Selector from '../selector'
+import Modal from '../../mixins/modal'
+import toggler from '../toggler'
+
+export default {
+ name: 'edit-environment-role',
+
+ mixins: [FormMixin, Modal],
+
+ components: {
+ toggler,
+ Modal,
+ Selector,
+ textinput
+ },
+
+ props: {
+ choices: Array,
+ initialData: String,
+ revoke: Boolean,
+ },
+
+ data: function () {
+ return {
+ new_role: this.initialData,
+ }
+ },
+
+ methods: {
+ change: function (e) {
+ e.preventDefault()
+ this.new_role = this.revoke ? "" : e.target.value
+ },
+ cancel: function () {
+ this.new_role = this.initialData
+ },
+ },
+
+ computed: {
+ displayName: function () {
+ for (var arr in this.choices) {
+ if (this.choices[arr][0] == this.new_role) {
+ return this.choices[arr][1].name
+ }
+ }
+ return this.new_role ? this.new_role : "no access"
+ },
+ label_class: function () {
+ return this.displayName === "no access" ?
+ "label" : "label label--success"
+ },
+ },
+ newRole: function () {
+ return this.revoke ? "" : this.new_role
+ }
+}
diff --git a/js/components/forms/edit_project_roles.js b/js/components/forms/edit_project_roles.js
new file mode 100644
index 00000000..86d7f243
--- /dev/null
+++ b/js/components/forms/edit_project_roles.js
@@ -0,0 +1,23 @@
+import FormMixin from '../../mixins/form'
+import Modal from '../../mixins/modal'
+import toggler from '../toggler'
+import EditEnvironmentRole from './edit_environment_role'
+
+export default {
+ name: 'edit-project-roles',
+
+ mixins: [FormMixin, Modal],
+
+ components: {
+ toggler,
+ EditEnvironmentRole,
+ },
+
+ props: {
+ name: String
+ },
+
+ data: function() {
+ return { revoke: false }
+ }
+}
diff --git a/js/index.js b/js/index.js
index 52e9d83c..a91f06c2 100644
--- a/js/index.js
+++ b/js/index.js
@@ -14,6 +14,7 @@ import financial from './components/forms/financial'
import toggler from './components/toggler'
import NewProject from './components/forms/new_project'
import EditEnvironmentRole from './components/forms/edit_environment_role'
+import EditProjectRoles from './components/forms/edit_project_roles'
import Modal from './mixins/modal'
import selector from './components/selector'
import BudgetChart from './components/charts/budget_chart'
@@ -42,6 +43,7 @@ const app = new Vue({
CcpoApproval,
LocalDatetime,
EditEnvironmentRole,
+ EditProjectRoles,
},
mounted: function() {
diff --git a/templates/workspaces/members/edit.html b/templates/workspaces/members/edit.html
index c997b651..856a58ba 100644
--- a/templates/workspaces/members/edit.html
+++ b/templates/workspaces/members/edit.html
@@ -52,6 +52,7 @@
{% for project in projects %}
{% set revoke_modal_name = project.name + 'RevokeModal' %}
+