diff --git a/frontend/package.json b/frontend/package.json
index 7ee82ab..c5d9de8 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,7 +1,7 @@
{
"name": "gnexus-creds-frontend",
"private": true,
- "version": "0.1.0",
+ "version": "0.2.0",
"type": "module",
"scripts": {
"dev": "vite --host 0.0.0.0",
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 356811d..5f70419 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -86,6 +86,8 @@
const editing = ref(false);
const editFields = ref(false);
const pendingDeleteSecret = ref(null);
+const pendingRevokeToken = ref(null);
+const showRevokeConfirm = ref(false);
const importFiles = ref([]);
const importFile = ref(null);
const importPreview = ref(null);
@@ -762,13 +764,17 @@
}
}
-async function revokeToken(token) {
- await api.revokeToken(token.id);
- await loadTokens();
+function confirmRevokeToken(token) {
+ pendingRevokeToken.value = token;
+ showRevokeConfirm.value = true;
}
-async function copyText(value) {
- await copyValue(value);
+async function doRevokeToken() {
+ if (!pendingRevokeToken.value) return;
+ await api.revokeToken(pendingRevokeToken.value.id);
+ pendingRevokeToken.value = null;
+ showRevokeConfirm.value = false;
+ await loadTokens();
}
async function exportData() {
@@ -1016,6 +1022,7 @@
@@ -1483,16 +1495,26 @@
@@ -1588,7 +1610,7 @@
Create token
- Copy token
+
Close
@@ -1613,6 +1635,15 @@
confirm-variant="danger"
@confirm="restoreBackup"
/>
+
+
diff --git a/frontend/src/styles.css b/frontend/src/styles.css
index 23cee0a..8223785 100644
--- a/frontend/src/styles.css
+++ b/frontend/src/styles.css
@@ -78,13 +78,14 @@
}
.settings-metrics {
- display: grid;
- grid-template-columns: repeat(3, minmax(120px, 170px));
+ display: flex;
gap: 15px;
+ flex-wrap: wrap;
}
.list-panel {
overflow: auto;
+ padding-bottom: 40px;
}
.secrets-table {
@@ -155,6 +156,12 @@
transform-origin: top right;
}
+.sort-dropdown .dropdown-menu {
+ right: 0;
+ left: auto;
+ transform-origin: top right;
+}
+
.detail-panel .description-list {
max-width: none;
}
@@ -179,6 +186,17 @@
grid-template-columns: repeat(2, minmax(0, 1fr));
}
+.form-grid.two .form-row-two {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: 12px;
+ grid-column: 1 / -1;
+}
+
+.form-grid.two .form-col-full {
+ grid-column: 1 / -1;
+}
+
.create-modal-body {
display: grid;
gap: 12px;
@@ -236,7 +254,8 @@
padding-top: 28px;
}
-.create-access-grid {
+.create-access-grid,
+.access-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
@@ -322,6 +341,7 @@
gap: 10px;
align-items: center;
flex-wrap: wrap;
+ justify-content: flex-end;
}
.revealed-fields-list.list-actions {