diff --git a/ui/src/__tests__/components/group/__snapshots__/GroupRow.test.js.snap b/ui/src/__tests__/components/group/__snapshots__/GroupRow.test.js.snap
index 521a36ccb1b..295b939a2ee 100644
--- a/ui/src/__tests__/components/group/__snapshots__/GroupRow.test.js.snap
+++ b/ui/src/__tests__/components/group/__snapshots__/GroupRow.test.js.snap
@@ -10,7 +10,7 @@ exports[`GroupRow should render 1`] = `
border-image: none;
-webkit-border-image: initial;
border-image: initial;
- height: 50px;
+ padding: 5px 0 5px 15px;
}
.emotion-2 {
@@ -138,6 +138,30 @@ exports[`GroupRow should render 1`] = `
+
+
+
+
+ |
|
+
@@ -129,6 +132,11 @@ exports[`GroupTable should render 1`] = `
>
Settings
+
+ History
+ |
@@ -138,39 +146,39 @@ exports[`GroupTable should render 1`] = `
|
a
|
Invalid date
|
N/A
|
|
|
|
+
+ |
+
+
+ |
b
|
Invalid date
|
N/A
|
|
|
|
+
+
+
+ |
+
|
-
-
-
- ALLOW
- |
-
- aaa
- |
-
- home.pgote:role.allunixusers
- |
-
- home.pgote:aaaa
- |
-
-
- |
-
-
+
@@ -285,28 +214,6 @@ exports[`PolicyRuleTable should render 2`] = `
background-color: white;
}
-.emotion-22 {
- background-color: #3570f40D;
- text-align: left;
- padding: 5px 0 5px 15px;
- vertical-align: middle;
- word-break: break-all;
-}
-
-.emotion-30 {
- background-color: #3570f40D;
- text-align: center;
- padding: 5px 0 5px 15px;
- vertical-align: middle;
- word-break: break-all;
-}
-
-.emotion-32 {
- fill: #188fff;
- cursor: pointer;
- vertical-align: text-bottom;
-}
-
-
-
-
- ALLOW
- |
-
- aaa
- |
-
- home.pgote:role.allunixusers
- |
-
- home.pgote:aaaa
- |
-
-
- |
-
-
+
diff --git a/ui/src/__tests__/components/role/__snapshots__/RoleGroup.test.js.snap b/ui/src/__tests__/components/role/__snapshots__/RoleGroup.test.js.snap
index bc231386559..8a5e181744b 100644
--- a/ui/src/__tests__/components/role/__snapshots__/RoleGroup.test.js.snap
+++ b/ui/src/__tests__/components/role/__snapshots__/RoleGroup.test.js.snap
@@ -10,68 +10,81 @@ exports[`RoleGroup should render 1`] = `
border-image: none;
-webkit-border-image: initial;
border-image: initial;
- height: 50px;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 10px 0 10px 0;
}
.emotion-2 {
text-align: left;
- padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
+ width: 100%;
}
.emotion-4 {
+ padding-left: 20px;
+ width: 100%;
+}
+
+.emotion-6 {
margin-right: 10px;
verticalalign: bottom;;
}
-.emotion-6 {
+.emotion-8 {
fill: #188fff;
cursor: pointer;
vertical-align: text-bottom;
}
-.emotion-7 {
+.emotion-9 {
text-align: center;
- padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
+ width: 100%;
}
-
-
-
-
-
- AWS Roles (2)
- |
-
+
+ arrowhead-down-circle
+
+
+
+
+
+ AWS Roles (2)
+
+
+
- |
+
`;
exports[`RoleGroup should render empty 1`] = `null`;
diff --git a/ui/src/__tests__/components/role/__snapshots__/RoleList.test.js.snap b/ui/src/__tests__/components/role/__snapshots__/RoleList.test.js.snap
index ea8a880ba3c..4ce9d32878b 100644
--- a/ui/src/__tests__/components/role/__snapshots__/RoleList.test.js.snap
+++ b/ui/src/__tests__/components/role/__snapshots__/RoleList.test.js.snap
@@ -298,42 +298,32 @@ exports[`RoleList should render 1`] = `
}
.emotion-17 {
- text-align: left;
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
+ border-bottom: 2px solid rgb(213, 213, 213);
+ color: rgb(154, 154, 154);
font-size: 0.8rem;
- padding-bottom: 5px;
vertical-align: top;
text-transform: uppercase;
- padding: 5px 0 5px 35px;
+ padding: 5px 0px 5px 15px;
word-break: break-all;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
}
.emotion-19 {
text-align: left;
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
- font-size: 0.8rem;
- padding-bottom: 5px;
- vertical-align: top;
- text-transform: uppercase;
- padding: 5px 0 5px 15px;
- word-break: break-all;
+ width: 28%;
+}
+
+.emotion-21 {
+ text-align: left;
+ width: 15%;
}
-.emotion-23 {
+.emotion-25 {
text-align: center;
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
- font-size: 0.8rem;
- padding-bottom: 5px;
- vertical-align: top;
- text-transform: uppercase;
- padding: 5px 0 5px 15px;
- word-break: break-all;
+ width: 7%;
}
-
-
-
-
- Role
- |
-
- Modified Date
- |
-
- Reviewed Date
- |
-
- Members
- |
-
- Review
- |
-
- Policy Rule
- |
-
- Tags
- |
-
- Settings
- |
-
- Delete
- |
-
-
+
+
+ Role
+
+
+ Modified Date
+
+
+ Reviewed Date
+
+
+ Members
+
+
+ Review
+
+
+ Policy Rule
+
+
+ Tags
+
+
+ Settings
+
+
+ History
+
+
+ Delete
+
+
-
+
`;
diff --git a/ui/src/__tests__/components/role/__snapshots__/RoleRow.test.js.snap b/ui/src/__tests__/components/role/__snapshots__/RoleRow.test.js.snap
index 3cf26eb8086..637cdf91418 100644
--- a/ui/src/__tests__/components/role/__snapshots__/RoleRow.test.js.snap
+++ b/ui/src/__tests__/components/role/__snapshots__/RoleRow.test.js.snap
@@ -10,7 +10,11 @@ exports[`RoleRow should render 1`] = `
border-image: none;
-webkit-border-image: initial;
border-image: initial;
- height: 50px;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 5px 0 5px 15px;
}
.emotion-2 {
@@ -19,18 +23,29 @@ exports[`RoleRow should render 1`] = `
padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
+ width: 28%;
}
.emotion-4 {
padding-left: 20px;
}
+.emotion-6 {
+ background-color: #3570f40D;
+ text-align: left;
+ padding: 5px 0 5px 15px;
+ vertical-align: middle;
+ word-break: break-all;
+ width: 16%;
+}
+
.emotion-10 {
background-color: #3570f40D;
text-align: center;
padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
+ width: 7%;
}
.emotion-12 {
@@ -39,11 +54,11 @@ exports[`RoleRow should render 1`] = `
vertical-align: text-bottom;
}
-
-
@@ -54,21 +69,21 @@ exports[`RoleRow should render 1`] = `
>
ztssia_cert_rotate
- |
-
+
2017-08-03 18:44 UTC
- |
-
+
N/A
- |
-
+
@@ -93,9 +108,9 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
@@ -120,9 +135,9 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
@@ -141,9 +156,9 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
@@ -165,9 +180,9 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
@@ -189,9 +204,33 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
+
+
+
+
+
@@ -213,6 +252,6 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
+
`;
diff --git a/ui/src/__tests__/components/role/__snapshots__/RoleSectionRow.test.js.snap b/ui/src/__tests__/components/role/__snapshots__/RoleSectionRow.test.js.snap
index c9270b122da..c8c12d887a3 100644
--- a/ui/src/__tests__/components/role/__snapshots__/RoleSectionRow.test.js.snap
+++ b/ui/src/__tests__/components/role/__snapshots__/RoleSectionRow.test.js.snap
@@ -1,13 +1,20 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`RoleRow should render 1`] = `
+.emotion-0 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+
.emotion-2 {
background-color: #3570f40D;
text-align: left;
padding: 5px 0 5px 0;
vertical-align: middle;
word-break: break-all;
- width: 29%;
+ width: 28%;
}
.emotion-4 {
@@ -20,16 +27,7 @@ exports[`RoleRow should render 1`] = `
padding: 5px 0 5px 0;
vertical-align: middle;
word-break: break-all;
- width: 17%;
-}
-
-.emotion-8 {
- background-color: #3570f40D;
- text-align: left;
- padding: 5px 0 5px 0;
- vertical-align: middle;
- word-break: break-all;
- width: 12%;
+ width: 15%;
}
.emotion-10 {
@@ -38,7 +36,7 @@ exports[`RoleRow should render 1`] = `
padding: 5px 0 5px 0;
vertical-align: middle;
word-break: break-all;
- width: 9%;
+ width: 7%;
}
.emotion-12 {
@@ -47,20 +45,11 @@ exports[`RoleRow should render 1`] = `
vertical-align: text-bottom;
}
-.emotion-25 {
- background-color: #3570f40D;
- text-align: center;
- padding: 5px 0 5px 0;
- vertical-align: middle;
- word-break: break-all;
- width: 6%;
-}
-
-
-
@@ -71,20 +60,20 @@ exports[`RoleRow should render 1`] = `
>
ztssia_cert_rotate
- |
-
+
2017-08-03 18:44 UTC
- |
-
+
N/A
- |
-
+
@@ -110,8 +99,8 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
@@ -137,8 +126,8 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
@@ -158,8 +147,8 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
@@ -182,8 +171,8 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
@@ -206,9 +195,33 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
+
+
+
+
+
@@ -230,6 +243,6 @@ exports[`RoleRow should render 1`] = `
/>
- |
-
+
+
`;
diff --git a/ui/src/__tests__/components/role/__snapshots__/RoleTable.test.js.snap b/ui/src/__tests__/components/role/__snapshots__/RoleTable.test.js.snap
index b317ff8a6ab..dc091bf1628 100644
--- a/ui/src/__tests__/components/role/__snapshots__/RoleTable.test.js.snap
+++ b/ui/src/__tests__/components/role/__snapshots__/RoleTable.test.js.snap
@@ -10,45 +10,35 @@ exports[`RoleTable should render 1`] = `
}
.emotion-2 {
- text-align: left;
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
+ border-bottom: 2px solid rgb(213, 213, 213);
+ color: rgb(154, 154, 154);
font-size: 0.8rem;
- padding-bottom: 5px;
vertical-align: top;
text-transform: uppercase;
- padding: 5px 0 5px 35px;
+ padding: 5px 0px 5px 15px;
word-break: break-all;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
}
.emotion-4 {
text-align: left;
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
- font-size: 0.8rem;
- padding-bottom: 5px;
- vertical-align: top;
- text-transform: uppercase;
- padding: 5px 0 5px 15px;
- word-break: break-all;
+ width: 28%;
}
-.emotion-8 {
+.emotion-6 {
+ text-align: left;
+ width: 15%;
+}
+
+.emotion-10 {
text-align: center;
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
- font-size: 0.8rem;
- padding-bottom: 5px;
- vertical-align: top;
- text-transform: uppercase;
- padding: 5px 0 5px 15px;
- word-break: break-all;
+ width: 7%;
}
-.emotion-20 {
+.emotion-24 {
box-sizing: border-box;
margin-top: 10px;
box-shadow: 0 1px 4px #d9d9d9;
@@ -57,118 +47,137 @@ exports[`RoleTable should render 1`] = `
border-image: none;
-webkit-border-image: initial;
border-image: initial;
- height: 50px;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 5px 0 5px 15px;
}
-.emotion-22 {
+.emotion-26 {
text-align: left;
padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
+ width: 28%;
}
-.emotion-24 {
+.emotion-28 {
padding-left: 20px;
}
.emotion-30 {
+ text-align: left;
+ padding: 5px 0 5px 15px;
+ vertical-align: middle;
+ word-break: break-all;
+ width: 16%;
+}
+
+.emotion-34 {
text-align: center;
padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
+ width: 7%;
}
-.emotion-32 {
+.emotion-36 {
fill: #188fff;
cursor: pointer;
vertical-align: text-bottom;
}
-
-
-
-
- Role
- |
-
- Modified Date
- |
-
- Reviewed Date
- |
-
- Members
- |
-
- Review
- |
-
- Policy Rule
- |
-
- Tags
- |
-
- Settings
- |
-
- Delete
- |
-
-
+
+
+ Role
+
+
+ Modified Date
+
+
+ Reviewed Date
+
+
+ Members
+
+
+ Review
+
+
+ Policy Rule
+
+
+ Tags
+
+
+ Settings
+
+
+ History
+
+
+ Delete
+
+
-
-
a
- |
-
+
Invalid date
- |
-
+
N/A
- |
-
+
- |
-
+
- |
-
+
- |
-
+
- |
-
+
- |
-
+
+
+
+
+
+
- |
-
-
+
+
-
b
- |
-
+
Invalid date
- |
-
+
N/A
- |
-
+
- |
-
+
- |
-
+
- |
-
+
- |
-
+
- |
-
+
+
+
+
+
+
- |
-
+
+
-
+
`;
diff --git a/ui/src/__tests__/pages/__snapshots__/role.test.js.snap b/ui/src/__tests__/pages/__snapshots__/role.test.js.snap
index 781e33d1d2e..c170d3ea6a9 100644
--- a/ui/src/__tests__/pages/__snapshots__/role.test.js.snap
+++ b/ui/src/__tests__/pages/__snapshots__/role.test.js.snap
@@ -1034,45 +1034,35 @@ exports[`RolePage should render 1`] = `
}
.emotion-90 {
- text-align: left;
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
+ border-bottom: 2px solid rgb(213, 213, 213);
+ color: rgb(154, 154, 154);
font-size: 0.8rem;
- padding-bottom: 5px;
vertical-align: top;
text-transform: uppercase;
- padding: 5px 0 5px 35px;
+ padding: 5px 0px 5px 15px;
word-break: break-all;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
}
.emotion-92 {
text-align: left;
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
- font-size: 0.8rem;
- padding-bottom: 5px;
- vertical-align: top;
- text-transform: uppercase;
- padding: 5px 0 5px 15px;
- word-break: break-all;
+ width: 28%;
+}
+
+.emotion-94 {
+ text-align: left;
+ width: 15%;
}
-.emotion-96 {
+.emotion-98 {
text-align: center;
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
- font-size: 0.8rem;
- padding-bottom: 5px;
- vertical-align: top;
- text-transform: uppercase;
- padding: 5px 0 5px 15px;
- word-break: break-all;
+ width: 7%;
}
-.emotion-108 {
+.emotion-112 {
-webkit-align-items: center;
-webkit-box-align: center;
-ms-flex-align: center;
@@ -1098,13 +1088,13 @@ exports[`RolePage should render 1`] = `
width: 20px;
}
-.emotion-110 {
+.emotion-114 {
fill: #303030;
cursor: inherit;
vertical-align: text-bottom;
}
-.emotion-111 {
+.emotion-115 {
margin-right: 0;
border-left: 1px solid #d5d5d5;
-webkit-flex: 0 0 350px;
@@ -1119,7 +1109,7 @@ exports[`RolePage should render 1`] = `
width: 350px;
}
-.emotion-113 {
+.emotion-117 {
-webkit-align-items: baseline;
-webkit-box-align: baseline;
-ms-flex-align: baseline;
@@ -1138,28 +1128,28 @@ exports[`RolePage should render 1`] = `
padding: 20px 30px 20px 15px;
}
-.emotion-115 {
+.emotion-119 {
font-size: 16px;
font-weight: 600;
}
-.emotion-117 {
+.emotion-121 {
color: #3570f4;
-webkit-text-decoration: none;
text-decoration: none;
cursor: pointer;
}
-.emotion-119 {
+.emotion-123 {
padding: 0 5px;
color: #d5d5d5;
}
-.emotion-123 {
+.emotion-127 {
padding: 0 30px 0 15px;
}
-.emotion-125 {
+.emotion-129 {
padding: 10px 0;
display: -webkit-box;
display: -webkit-flex;
@@ -1167,12 +1157,12 @@ exports[`RolePage should render 1`] = `
display: flex;
}
-.emotion-127 {
+.emotion-131 {
font-size: 1.25em;
margin-right: 5px;
}
-.emotion-129 {
+.emotion-133 {
fill: #303030;
cursor: inherit;
vertical-align: baseline;
@@ -1539,61 +1529,66 @@ exports[`RolePage should render 1`] = `
-
-
-
-
- Role
- |
-
- Modified Date
- |
-
- Reviewed Date
- |
-
- Members
- |
-
- Review
- |
-
- Policy Rule
- |
-
- Tags
- |
-
- Settings
- |
-
- Delete
- |
-
-
+
+
+ Role
+
+
+ Modified Date
+
+
+ Reviewed Date
+
+
+ Members
+
+
+ Review
+
+
+ Policy Rule
+
+
+ Tags
+
+
+ Settings
+
+
+ History
+
+
+ Delete
+
+
-
+
@@ -1601,11 +1596,11 @@ exports[`RolePage should render 1`] = `
data-testid="user-domains"
>
athens.ci
diff --git a/ui/src/components/denali/icons/Icons.js b/ui/src/components/denali/icons/Icons.js
index 0d23a4f4f0f..02228057a74 100644
--- a/ui/src/components/denali/icons/Icons.js
+++ b/ui/src/components/denali/icons/Icons.js
@@ -159,6 +159,10 @@ export const ICONS = {
'M857.6 622.933l117.333-32c4.066-23.729 6.391-51.060 6.391-78.933s-2.324-55.204-6.789-81.809l0.399 2.875-117.333-32c-16.384-4.627-28.189-19.444-28.189-37.017 0-6.766 1.75-13.124 4.822-18.645l-0.1 0.196 59.733-106.667c-30.048-42.691-66.108-78.751-107.412-107.872l-1.388-0.928-106.667 59.733-17.067 4.267c-0.448 0.019-0.974 0.029-1.503 0.029-17.418 0-32.128-11.597-36.828-27.491l-0.069-0.272-32-117.333c-23.729-4.066-51.060-6.391-78.933-6.391s-55.204 2.324-81.809 6.789l2.875-0.399-32 117.333c-4.77 16.166-19.479 27.763-36.897 27.763-0.528 0-1.054-0.011-1.578-0.032l0.075 0.002-17.067-4.267-106.667-59.733c-42.691 30.048-78.751 66.108-107.872 107.412l-0.928 1.388 59.733 106.667c2.972 5.325 4.722 11.683 4.722 18.449 0 17.574-11.805 32.39-27.918 36.952l-0.271 0.065-117.333 32c-4.066 23.729-6.391 51.060-6.391 78.933s2.324 55.204 6.789 81.809l-0.399-2.875 117.333 32c16.384 4.627 28.189 19.444 28.189 37.017 0 6.766-1.75 13.124-4.822 18.645l0.1-0.196-59.733 106.667c30.048 42.691 66.108 78.751 107.412 107.872l1.388 0.928 106.667-59.733 17.067-4.267c0.448-0.019 0.974-0.029 1.503-0.029 17.418 0 32.128 11.597 36.828 27.491l0.069 0.272 32 117.333c23.729 4.066 51.060 6.391 78.933 6.391s55.204-2.324 81.809-6.789l-2.875 0.399 32-117.333c4.77-16.166 19.479-27.763 36.897-27.763 0.528 0 1.054 0.011 1.578 0.032l-0.075-0.002 17.067 4.267 106.667 59.733c42.691-30.048 78.751-66.108 107.872-107.412l0.928-1.388-59.733-106.667c-2.972-5.325-4.722-11.683-4.722-18.449 0-17.574 11.805-32.39 27.918-36.952l0.271-0.065zM832 539.733h-4.267c-32.839 13.039-58.565 38.072-72.208 69.558l-0.325 0.842c-6.487 14.396-10.267 31.208-10.267 48.903 0 19.476 4.579 37.883 12.718 54.202l-0.318-0.705h2.133v4.267l32 53.333c-4.628 6.767-10.3 12.439-16.848 16.925l-0.219 0.141-53.333-32h-6.4c-15.332-8.067-33.502-12.801-52.778-12.801-0.195 0-0.39 0-0.585 0.001l0.030-0c-54.426 0.192-100.831 34.322-119.172 82.322l-0.295 0.878v6.4l-19.2 64h-21.333l-17.067-61.867v-4.267c-18.102-50.142-65.281-85.337-120.681-85.337-0.323 0-0.646 0.001-0.969 0.004l0.050-0c-0.165-0.001-0.36-0.001-0.555-0.001-19.276 0-37.446 4.734-53.412 13.104l0.633-0.302h-6.4l-53.333 32c-6.767-4.628-12.439-10.3-16.925-16.848l-0.141-0.219 32-53.333v-4.267h2.133c7.821-15.615 12.4-34.021 12.4-53.497 0-17.695-3.78-34.507-10.575-49.673l0.309 0.77c-13.968-32.328-39.694-57.361-71.655-70.091l-0.879-0.309h-6.4l-61.867-19.2v-21.333l61.867-17.067h6.4c32.839-13.039 58.565-38.072 72.208-69.558l0.325-0.842c6.487-14.396 10.267-31.208 10.267-48.903 0-19.476-4.579-37.883-12.718-54.202l0.318 0.705h-2.133v-4.267l-32-53.333 17.067-17.067 53.333 32h6.4c15.332 8.067 33.502 12.801 52.778 12.801 0.195 0 0.39-0 0.585-0.001l-0.030 0c54.426-0.192 100.831-34.322 119.172-82.322l0.295-0.878v-6.4l19.2-64h21.333l17.067 61.867v4.267c18.102 50.142 65.281 85.337 120.681 85.337 0.323 0 0.646-0.001 0.969-0.004l-0.050 0c0.165 0.001 0.36 0.001 0.555 0.001 19.276 0 37.446-4.734 53.412-13.104l-0.633 0.302h6.4l53.333-32c6.767 4.628 12.439 10.3 16.925 16.848l0.141 0.219-32 53.333v4.267h-2.133c-7.821 15.615-12.4 34.021-12.4 53.497 0 17.695 3.78 34.507 10.575 49.673l-0.309-0.77c13.968 32.328 39.694 57.361 71.655 70.091l0.879 0.309h6.4l61.867 17.067v21.333l-61.867 17.067z',
'M512 320c-106.039 0-192 85.961-192 192s85.961 192 192 192c106.039 0 192-85.961 192-192v0c0-106.039-85.961-192-192-192v0zM512 618.667c-58.91 0-106.667-47.756-106.667-106.667s47.756-106.667 106.667-106.667c58.91 0 106.667 47.756 106.667 106.667v0c0 58.91-47.756 106.667-106.667 106.667v0z'
],
+ 'time-history': [
+ "M981.333 512c-1.127 258.351-210.821 467.35-469.329 467.35-183.080 0-341.676-104.828-419.040-257.735l-1.23-2.682c-3.724-6.205-5.927-13.692-5.927-21.694 0-13.702 6.458-25.895 16.497-33.701l0.096-0.072c7.082-5.427 16.067-8.696 25.816-8.696 16.626 0 31.031 9.51 38.072 23.387l0.112 0.243c63.468 129.74 194.499 217.51 346.030 217.51 212.077 0 384-171.923 384-384s-171.923-384-384-384c-113.597 0-215.674 49.327-285.979 127.729l-0.318 0.361h113.067c0.244-0.005 0.531-0.007 0.819-0.007 21.726 0 39.84 15.466 43.934 35.989l0.048 0.286c0.307 1.924 0.483 4.143 0.483 6.403 0 23.564-19.103 42.667-42.667 42.667-0.17 0-0.34-0.001-0.509-0.003l0.026 0h-213.333c-23.564 0-42.667-19.103-42.667-42.667v0-211.2c-0.005-0.244-0.007-0.531-0.007-0.819 0-21.726 15.466-39.84 35.989-43.934l0.286-0.048c1.924-0.307 4.143-0.483 6.403-0.483 23.564 0 42.667 19.103 42.667 42.667 0 0.17-0.001 0.34-0.003 0.509l0-0.026v104.533c85.767-90.732 206.955-147.207 341.333-147.207 259.206 0 469.333 210.128 469.333 469.333 0 0.003-0 0.005-0 0.008l0-0.001z",
+ "M725.333 682.667c-0.223 0.005-0.486 0.008-0.749 0.008-7.696 0-14.832-2.397-20.703-6.486l0.118 0.078-234.667-140.8v-236.8c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667v0 189.867l192 115.2c12.808 6.981 21.354 20.347 21.354 35.708 0 8.131-2.394 15.703-6.516 22.049l0.096-0.157c-6.984 12.799-20.345 21.337-35.7 21.337-0.199 0-0.398-0.001-0.597-0.004l0.030 0z"
+ ],
loader: [
'M512 256c-141.385 0-256 114.615-256 256s114.615 256 256 256v0',
'M512 768c141.385 0 256-114.615 256-256s-114.615-256-256-256v0',
diff --git a/ui/src/components/group/GroupRow.js b/ui/src/components/group/GroupRow.js
index 13a5b3c5061..a914e04bf6c 100644
--- a/ui/src/components/group/GroupRow.js
+++ b/ui/src/components/group/GroupRow.js
@@ -41,7 +41,7 @@ const TrStyled = styled.tr`
border-image: none;
-webkit-border-image: initial;
border-image: initial;
- height: 50px;
+ padding: 5px 0 5px 15px;
`;
const MenuDiv = styled.div`
@@ -148,6 +148,10 @@ class GroupRow extends React.Component {
this,
`/domain/${this.props.domain}/group/${this.state.name}/settings`
);
+ let clickHistory = this.onClickFunction.bind(
+ this,
+ `/domain/${this.props.domain}/group/${this.state.name}/history`
+ );
let clickRoles = this.onClickFunction.bind(
this,
`/domain/${this.props.domain}/group/${this.state.name}/roles`
@@ -261,6 +265,25 @@ class GroupRow extends React.Component {
Settings
+
+
+
-
-
-
-
+
+
+
+
+
@@ -124,6 +125,7 @@ export default class GroupTable extends React.Component {
Members
Roles
Settings
+ History
Delete
diff --git a/ui/src/components/role-policy/RolePolicyRuleTable.js b/ui/src/components/role-policy/RolePolicyRuleTable.js
index 7d88c707a27..e7fb3ef6c55 100644
--- a/ui/src/components/role-policy/RolePolicyRuleTable.js
+++ b/ui/src/components/role-policy/RolePolicyRuleTable.js
@@ -22,6 +22,8 @@ import Alert from '../denali/Alert';
import DeleteModal from '../modal/DeleteModal';
import { DISPLAY_SPACE, MODAL_TIME_OUT } from '../constants/constants';
import RequestUtils from '../utils/RequestUtils';
+import NameUtils from '../utils/NameUtils';
+
const StyleTable = styled.table`
width: 100%;
border-spacing: 0;
@@ -181,43 +183,49 @@ export default class RolePolicyRuleTable extends React.Component {
const center = 'center';
const right = 'right';
let id = this.props.id;
- this.state.assertions.forEach((assertion, i) => {
- let onClickDeleteAssertion = this.onClickDeleteAssertion.bind(
- this,
- assertion.role,
- assertion.id
- );
- let color = '';
- if (i % 2 === 0) {
- color = colors.row;
- }
- rows.push(
-
-
- {assertion.effect}
-
-
- {assertion.action.replace(/\s/g, DISPLAY_SPACE)}
-
-
- {assertion.role}
-
-
- {assertion.resource}
-
-
-
-
-
- );
- });
+ this.state.assertions
+ .filter(
+ (assertion) =>
+ NameUtils.getShortName(':role.', assertion.role) ===
+ this.props.role
+ )
+ .forEach((assertion, i) => {
+ let onClickDeleteAssertion = this.onClickDeleteAssertion.bind(
+ this,
+ assertion.role,
+ assertion.id
+ );
+ let color = '';
+ if (i % 2 === 0) {
+ color = colors.row;
+ }
+ rows.push(
+
+
+ {assertion.effect}
+
+
+ {assertion.action.replace(/\s/g, DISPLAY_SPACE)}
+
+
+ {assertion.role}
+
+
+ {assertion.resource}
+
+
+
+
+
+ );
+ });
let addAssertion = '';
if (this.state.addAssertion) {
addAssertion = (
diff --git a/ui/src/components/role/RoleGroup.js b/ui/src/components/role/RoleGroup.js
index 7a5deb79cf9..944bd54ba43 100644
--- a/ui/src/components/role/RoleGroup.js
+++ b/ui/src/components/role/RoleGroup.js
@@ -25,15 +25,15 @@ const LeftMarginSpan = styled.span`
verticalalign: bottom;;
`;
-const TDStyled = styled.td`
+const TDStyled = styled.div`
background-color: ${(props) => props.color};
text-align: ${(props) => props.align};
- padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
+ width: 100%;
`;
-const TrStyled = styled.tr`
+const TrStyled = styled.div`
box-sizing: border-box;
margin-top: 5px;
box-shadow: 0 1px 4px #d9d9d9;
@@ -42,7 +42,8 @@ const TrStyled = styled.tr`
border-image: none;
-webkit-border-image: initial;
border-image: initial;
- height: 50px;
+ display: flex;
+ padding: 10px 0 10px 0;
`;
const StyledDiv = styled.div`
@@ -50,7 +51,8 @@ const StyledDiv = styled.div`
width: 100%;
`;
-const StyledTable = styled.table`
+const StyledPaddingLeft = styled.div`
+ padding-left: 20px;
width: 100%;
`;
@@ -128,8 +130,8 @@ export default class RoleGroup extends React.Component {
rows.push(
-
-
+
+
{`${label} Roles (${length})`}
-
-
-
- {sectionRows}
-
-
+
+ {sectionRows}
);
@@ -158,21 +156,23 @@ export default class RoleGroup extends React.Component {
rows.push(
-
-
-
- {`${label} Roles (${length})`}
+
+
+
+
+ {`${label} Roles (${length})`}
+
@@ -181,7 +181,7 @@ export default class RoleGroup extends React.Component {
return rows;
} else {
- return ;
+ return null;
}
}
}
diff --git a/ui/src/components/role/RoleRow.js b/ui/src/components/role/RoleRow.js
index 2c4a5873c00..288152b3ca8 100644
--- a/ui/src/components/role/RoleRow.js
+++ b/ui/src/components/role/RoleRow.js
@@ -24,15 +24,34 @@ import DateUtils from '../utils/DateUtils';
import RequestUtils from '../utils/RequestUtils';
import { withRouter } from 'next/router';
-const TDStyled = styled.td`
+const TDStyledName = styled.div`
background-color: ${(props) => props.color};
text-align: ${(props) => props.align};
padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
+ width: 28%;
`;
-const TrStyled = styled.tr`
+const TDStyledTime = styled.div`
+ background-color: ${(props) => props.color};
+ text-align: ${(props) => props.align};
+ padding: 5px 0 5px 15px;
+ vertical-align: middle;
+ word-break: break-all;
+ width: 16%;
+`;
+
+const TDStyledIcon = styled.div`
+ background-color: ${(props) => props.color};
+ text-align: ${(props) => props.align};
+ padding: 5px 0 5px 15px;
+ vertical-align: middle;
+ word-break: break-all;
+ width: 7%;
+`;
+
+const TrStyled = styled.div`
box-sizing: border-box;
margin-top: 10px;
box-shadow: 0 1px 4px #d9d9d9;
@@ -41,7 +60,8 @@ const TrStyled = styled.tr`
border-image: none;
-webkit-border-image: initial;
border-image: initial;
- height: 50px;
+ display: flex;
+ padding: 5px 0 5px 15px;
`;
const MenuDiv = styled.div`
@@ -156,6 +176,10 @@ class RoleRow extends React.Component {
this,
`/domain/${this.props.domain}/role/${this.state.name}/policy`
);
+ let clickHistory = this.onClickFunction.bind(
+ this,
+ `/domain/${this.props.domain}/role/${this.state.name}/history`
+ );
let clickTag = this.onClickFunction.bind(
this,
`/domain/${this.props.domain}/role/${this.state.name}/tags`
@@ -205,6 +229,9 @@ class RoleRow extends React.Component {
);
+ let reviewRequired =
+ role.reviewEnabled && (role.memberExpiryDays || role.serviceExpiry);
+
let roleTypeIcon = role.trust ? iconDelegated : '';
let roleAuditIcon = auditEnabled ? iconAudit : '';
@@ -217,15 +244,15 @@ class RoleRow extends React.Component {
rows.push(
-
+
{roleTypeIcon}
{roleAuditIcon}
{roleNameSpan}
-
-
+
+
{this.localDate.getLocalDate(role.modified, 'UTC', 'UTC')}
-
-
+
+
{role.lastReviewedDate
? this.localDate.getLocalDate(
role.lastReviewedDate,
@@ -233,8 +260,8 @@ class RoleRow extends React.Component {
'UTC'
)
: 'N/A'}
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
-
+
);
diff --git a/ui/src/components/role/RoleSectionRow.js b/ui/src/components/role/RoleSectionRow.js
index e83daf67b62..14d4a4027f8 100644
--- a/ui/src/components/role/RoleSectionRow.js
+++ b/ui/src/components/role/RoleSectionRow.js
@@ -24,53 +24,36 @@ import DateUtils from '../utils/DateUtils';
import RequestUtils from '../utils/RequestUtils';
import { withRouter } from 'next/router';
-const TDName = styled.td`
+const TDName = styled.div`
background-color: ${(props) => props.color};
text-align: ${(props) => props.align};
padding: 5px 0 5px 0;
vertical-align: middle;
word-break: break-all;
- width: 29%;
+ width: 28%;
`;
-const TDModified = styled.td`
+const TDTime = styled.div`
background-color: ${(props) => props.color};
text-align: ${(props) => props.align};
padding: 5px 0 5px 0;
vertical-align: middle;
word-break: break-all;
- width: 17%;
+ width: 15%;
`;
-const TDReview = styled.td`
+const TDIcon = styled.div`
background-color: ${(props) => props.color};
text-align: ${(props) => props.align};
padding: 5px 0 5px 0;
vertical-align: middle;
word-break: break-all;
- width: 12%;
+ width: 7%;
`;
-const TDIcon = styled.td`
- background-color: ${(props) => props.color};
- text-align: ${(props) => props.align};
- padding: 5px 0 5px 0;
- vertical-align: middle;
- word-break: break-all;
- width: 9%;
-`;
-
-const TDDelete = styled.td`
- background-color: ${(props) => props.color};
- text-align: ${(props) => props.align};
- padding: 5px 0 5px 0;
- vertical-align: middle;
- word-break: break-all;
- width: 6%;
-`;
-
-const TrStyled = styled.tr`
+const TrStyled = styled.div`
background-color: ${(props) => props.color};
+ display: flex;
`;
const MenuDiv = styled.div`
@@ -169,7 +152,6 @@ class RoleSectionRow extends React.Component {
let center = 'center';
let role = this.props.details;
let color = this.props.color;
- let idx = this.props.idx;
let clickMembers = this.onClickFunction.bind(
this,
@@ -187,6 +169,10 @@ class RoleSectionRow extends React.Component {
this,
`/domain/${this.props.domain}/role/${this.state.name}/policy`
);
+ let clickHistory = this.onClickFunction.bind(
+ this,
+ `/domain/${this.props.domain}/role/${this.state.name}/history`
+ );
let clickTag = this.onClickFunction.bind(
this,
`/domain/${this.props.domain}/role/${this.state.name}/tags`
@@ -253,7 +239,7 @@ class RoleSectionRow extends React.Component {
{roleAuditIcon}
{roleNameSpan}
-
+
{role.expiration
? this.localDate.getLocalDate(
role.expiration,
@@ -261,7 +247,7 @@ class RoleSectionRow extends React.Component {
'UTC'
)
: 'N/A'}
-
+
);
}
diff --git a/ui/src/components/role/RoleTable.js b/ui/src/components/role/RoleTable.js
index dc858bffb2a..0bfdf16c8a4 100644
--- a/ui/src/components/role/RoleTable.js
+++ b/ui/src/components/role/RoleTable.js
@@ -18,7 +18,7 @@ import styled from '@emotion/styled';
import RoleRow from './RoleRow';
import RoleGroup from './RoleGroup';
-const StyleTable = styled.table`
+const StyleTable = styled.div`
width: 100%;
border-spacing: 0 15px;
display: table;
@@ -26,17 +26,30 @@ const StyleTable = styled.table`
border-color: grey;
`;
-const TableHeadStyled = styled.th`
- text-align: ${(props) => props.align};
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
+const TableHeadStyled = styled.div`
+ border-bottom: 2px solid rgb(213, 213, 213);
+ color: rgb(154, 154, 154);
font-size: 0.8rem;
- padding-bottom: 5px;
vertical-align: top;
text-transform: uppercase;
- padding: 5px 0 5px 15px;
+ padding: 5px 0px 5px 15px;
word-break: break-all;
+ display: flex;
+`;
+
+const StyledNameCol = styled.div`
+ text-align: ${(props) => props.align};
+ width: 28%;
+`;
+
+const StyledTimeCol = styled.div`
+ text-align: ${(props) => props.align};
+ width: 15%;
+`;
+
+const StyledIconCol = styled.div`
+ text-align: ${(props) => props.align};
+ width: 7%;
`;
const TableHeadStyledRoleName = styled.th`
@@ -196,31 +209,18 @@ export default class RoleTable extends React.Component {
return (
-
-
-
- Role
-
-
- Modified Date
-
-
- Reviewed Date
-
-
- Members
-
- Review
-
- Policy Rule
-
- Tags
-
- Settings
-
- Delete
-
-
+
+ Role
+ Modified Date
+ Reviewed Date
+ Members
+ Review
+ Policy Rule
+ Tags
+ Settings
+ History
+ Delete
+
{rows}
);
diff --git a/ui/src/components/role/UserRoleTable.js b/ui/src/components/role/UserRoleTable.js
index 45aa1f0c6f0..f194410d681 100644
--- a/ui/src/components/role/UserRoleTable.js
+++ b/ui/src/components/role/UserRoleTable.js
@@ -17,65 +17,55 @@ import React from 'react';
import styled from '@emotion/styled';
import Icon from '../denali/icons/Icon';
import { colors } from '../denali/styles';
-import RoleUserTable from './RoleUserTable';
import DeleteModal from '../modal/DeleteModal';
import Alert from '../denali/Alert';
import { MODAL_TIME_OUT } from '../constants/constants';
import DateUtils from '../utils/DateUtils';
import RequestUtils from '../utils/RequestUtils';
-const StyleTable = styled.table`
+const StyleTable = styled.div`
width: 100%;
border-spacing: 0 15px;
display: table;
border-collapse: separate;
border-color: grey;
`;
-const TableHeadStyled = styled.th`
- text-align: ${(props) => props.align};
- border-bottom: 2px solid #d5d5d5;
- color: #9a9a9a;
- font-weight: 600;
+
+const TableHeadStyled = styled.div`
+ border-bottom: 2px solid rgb(213, 213, 213);
+ color: rgb(154, 154, 154);
font-size: 0.8rem;
- padding-bottom: 5px;
vertical-align: top;
text-transform: uppercase;
- padding: 5px 0 5px 15px;
+ padding: 5px 0px 5px 15px;
word-break: break-all;
+ display: flex;
`;
const LeftMarginSpan = styled.span`
margin-right: 10px;
- verticalalign: bottom;
-`;
-
-const TDStyled = styled.td`
- background-color: ${(props) => props.color};
- text-align: ${(props) => props.align};
- padding: 5px 0 5px 15px;
- vertical-align: middle;
- word-break: break-all;
+ vertical-align: bottom;
`;
-const NameTDStyled = styled.td`
+const TDStyledMember = styled.div`
background-color: ${(props) => props.color};
text-align: ${(props) => props.align};
padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
- width: 60%;
+ width: 70%;
`;
-const ExpTDStyled = styled.td`
+const TDStyledIcon = styled.div`
background-color: ${(props) => props.color};
text-align: ${(props) => props.align};
padding: 5px 0 5px 15px;
vertical-align: middle;
word-break: break-all;
- width: 28%;
+ width: 15%;
`;
-const TrStyled = styled.tr`
+const TrStyled = styled.div`
box-sizing: border-box;
margin-top: 10px;
box-shadow: 0 1px 4px #d9d9d9;
@@ -84,24 +74,29 @@ const TrStyled = styled.tr`
border-image: none;
-webkit-border-image: initial;
border-image: initial;
- height: 50px;
+ display: flex;
`;
-const TDStyledSub = styled.td`
- background-color: ${(props) => props.color};
- text-align: ${(props) => props.align};
- padding: 5px 0 5px 15px;
- vertical-align: middle;
- word-break: break-all;
- width: 120px;
+const StyledTd = styled.div`
+ width: 100%;
`;
-const StyledTd = styled.td`
+const StyledTable = styled.div`
width: 100%;
`;
-const StyledTable = styled.table`
- width: 100%;
+const StyledUserCol = styled.div`
+ text-align: ${(props) => props.align};
+ width: 70%;
+`;
+
+const StyledIconCol = styled.div`
+ text-align: ${(props) => props.align};
+ width: 15%;
+`;
+
+const FlexDiv = styled.div`
+ display: flex;
`;
export default class UserRoleTable extends React.Component {
@@ -269,11 +264,11 @@ export default class UserRoleTable extends React.Component {
memberName
);
return (
-
-
+
+
{role.roleName}
-
-
+
+
{role.expiration
? this.dateUtils.getLocalDate(
role.expiration,
@@ -281,8 +276,8 @@ export default class UserRoleTable extends React.Component {
'UTC'
)
: null}
-
-
+
+
-
-
+
+
);
});
expandArray[memberName] = true;
@@ -383,7 +378,7 @@ export default class UserRoleTable extends React.Component {
if (!this.state.contents[item.memberName]) {
toReturn.push(
-
+
-
-
+
+
+
-
+
);
} else {
toReturn.push(
-
+
-
-
+
+
-
-
+
+
+
-
-
+
+
{this.state.contents[item.memberName]}
@@ -487,7 +476,7 @@ export default class UserRoleTable extends React.Component {
return (
-
+
{this.state.showSuccess ? (
) : null}
-
- MEMBER
-
- Expiration Date
-
- Delete
-
-
+ MEMBER
+
+ Expiration Date
+
+ Delete
+