Skip to content

Commit 4c637d2

Browse files
committed
Progress on history tab, cleaned up column defs
1 parent fdb43f3 commit 4c637d2

File tree

4 files changed

+155
-35
lines changed

4 files changed

+155
-35
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "lazy-admin",
3-
"version": "0.3.5",
3+
"version": "0.3.6",
44
"description": "GUI for PowerShell scripts to simplify day to day IT tasks.",
55
"productName": "Lazy Admin",
66
"cordovaId": "eu.houby-studio.lazy-admin",
@@ -13,7 +13,7 @@
1313
"release": "quasar build --mode electron --publish onTagOrDraft"
1414
},
1515
"dependencies": {
16-
"@quasar/extras": "^1.9.0",
16+
"@quasar/extras": "^1.9.3",
1717
"axios": "^0.19.2",
1818
"electron-log": "^4.1.1",
1919
"electron-updater": "^4.3.1",

src/layouts/FullLayout.vue

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<template>
22
<q-layout view="hhh lpr lff">
3-
43
<q-header
54
elevated
65
reveal
@@ -81,6 +80,7 @@
8180

8281
<div class="row items-center no-wrap">
8382
<q-btn
83+
@click="historyVisible = !historyVisible"
8484
round
8585
dense
8686
flat
@@ -381,7 +381,7 @@ export default {
381381
}
382382
},
383383
computed: {
384-
...mapGetters('lazystore', ['getLanguage', 'getMenuEntries', 'getSearch', 'getMasterDefinition', 'getDefinitions', 'getDefinitionsUpdateInProgress', 'getRestartRequired', 'getUpdateDate', 'getUpdateInProgress', 'getUpdateProgress']),
384+
...mapGetters('lazystore', ['getLanguage', 'getMenuEntries', 'getSearch', 'getMasterDefinition', 'getDefinitions', 'getDefinitionsUpdateInProgress', 'getRestartRequired', 'getUpdateDate', 'getUpdateInProgress', 'getUpdateProgress', 'getHistoryVisible']),
385385
animateToolBar: function () {
386386
// Toolbar starts as hidden (false state), on 'created', animation 'animateToolBar' starts transform and displays toolbar
387387
return this.loadToolBar ? 'animated slideInDown' : 'hidden'
@@ -455,6 +455,20 @@ export default {
455455
set (val) {
456456
this.$store.dispatch('lazystore/setUpdateProgress', val)
457457
}
458+
},
459+
historyVisible: {
460+
get () {
461+
return this.getHistoryVisible
462+
},
463+
set (val) {
464+
// If currently not on /scripts page, navigate there and shortly after display history (to work around drawer hiding when changing route)
465+
if (this.$route.path !== '/scripts') {
466+
this.$router.push('/scripts')
467+
.then(setTimeout(() => this.$store.dispatch('lazystore/setHistoryVisible', val), 100))
468+
} else {
469+
this.$store.dispatch('lazystore/setHistoryVisible', val)
470+
}
471+
}
458472
}
459473
},
460474
methods: {
@@ -714,3 +728,10 @@ export default {
714728
}
715729
}
716730
</script>
731+
732+
<style>
733+
/* Have to be one higher than q-drawer--right, which is history page, which occupies whole page and would hide menu */
734+
.q-drawer--left {
735+
z-index: 3001;
736+
}
737+
</style>

src/pages/ScriptsPage.vue

Lines changed: 108 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,83 @@
11
<template>
22
<q-page class="flex">
3+
<!-- Right drawer displaying history table -->
4+
<q-drawer
5+
v-model="historyVisible"
6+
:width="historyWidth"
7+
side="right"
8+
behavior="desktop"
9+
overlay
10+
>
11+
<div class="row fit">
12+
<div class="col">
13+
<q-table
14+
:data="history"
15+
:columns="historyColumns"
16+
:pagination.sync="scriptsPagination"
17+
wrap-cells
18+
row-key="index"
19+
hide-bottom
20+
hide-header
21+
>
22+
<!-- Template showing command date -->
23+
<template v-slot:body-cell-date="props">
24+
<q-td
25+
:props="props"
26+
auto-width
27+
class="text-no-wrap"
28+
>
29+
{{ props.value}}
30+
</q-td>
31+
</template>
32+
<!-- Template showing workflow steps -->
33+
<template v-slot:body-cell-steps="props">
34+
<q-td
35+
:props="props"
36+
auto-width
37+
class="text-no-wrap"
38+
>
39+
{{ props.row.currentWorkflowIndex +1 }}/{{ props.row.currentCommandMaster.workflow ? props.row.currentCommandMaster.workflow.length + 1 : 1 }}
40+
</q-td>
41+
</template>
42+
<!-- Template showing friendly command name and 'Cmdlet' which gets executed -->
43+
<template v-slot:body-cell-commandName="props">
44+
<q-td :props="props">
45+
<div>
46+
{{ props.row.currentCommandMaster.friendlyName ? props.row.currentCommandMaster.friendlyName[language] ? props.row.currentCommandMaster.friendlyName[language] : props.row.currentCommandMaster.friendlyName.default : '' }}
47+
</div>
48+
<div>
49+
{{ props.row.currentCommandMaster.commandName }}
50+
</div>
51+
</q-td>
52+
</template>
53+
<!-- Template showing results button -->
54+
<template v-slot:body-cell-results="props">
55+
<q-td
56+
:props="props"
57+
auto-width
58+
>
59+
<q-btn
60+
flat
61+
@click="showCommandDiag(props.row)"
62+
>{{ $t('launch') }}</q-btn>
63+
</q-td>
64+
</template>
65+
<!-- Template showing execute button -->
66+
<template v-slot:body-cell-execute="props">
67+
<q-td
68+
:props="props"
69+
auto-width
70+
>
71+
<q-btn
72+
flat
73+
@click="showCommandDiag(props.row)"
74+
>{{ $t('launch') }}</q-btn>
75+
</q-td>
76+
</template>
77+
</q-table>
78+
</div>
79+
</div>
80+
</q-drawer>
381
<!-- Dialog window is shown when command is selected with 'Execute' button -->
482
<q-dialog
583
v-model="displayCommandDiag"
@@ -430,7 +508,7 @@
430508
</template>
431509

432510
<script>
433-
import { exportFile } from 'quasar'
511+
import { exportFile, date } from 'quasar'
434512
import { mapGetters } from 'vuex'
435513
import { QMarkdown } from '@quasar/quasar-ui-qmarkdown'
436514
import Prism from 'vue-prismjs'
@@ -489,14 +567,22 @@ export default {
489567
'Switch': ['q-toggle', false]
490568
}, // Column definitions for scripts table
491569
scriptsColumns: [
492-
{ name: 'icon', align: 'center', label: 'Icon', field: row => row.icon, sortable: true, classes: 'gt-xs' },
493-
{ name: 'commandName', required: true, label: 'Command Name', align: 'left', field: row => row.commandName, format: val => `${val}`, sortable: true, classes: 'text-no-wrap' },
494-
{ name: 'friendlyName', label: 'Friendly Name', align: 'left', field: row => row.friendlyName ? row.friendlyName[(this.$i18n.locale)] ? row.friendlyName[(this.$i18n.locale)] : row.friendlyName['default'] : '', format: val => `${val}`, sortable: true, classes: 'hidden' },
495-
{ name: 'description', align: 'left', label: 'Description', field: row => row.description ? row.description[(this.$i18n.locale)] ? row.description[(this.$i18n.locale)] : row.description.default : '', sortable: true, classes: 'gt-sm' },
496-
{ name: 'spacer', align: 'center', label: 'Spacer', field: '', sortable: false },
497-
{ name: 'favorite', align: 'center', label: 'Icon', field: 'star', sortable: true, classes: 'gt-xs' },
498-
{ name: 'help', align: 'center', label: 'Icon', field: 'help', sortable: true, classes: 'gt-xs' },
499-
{ name: 'execute', label: 'Execute', field: 'Execute', sortable: true, sort: (a, b) => parseInt(a, 10) - parseInt(b, 10) }
570+
{ name: 'icon', label: 'Icon', classes: 'gt-xs' },
571+
{ name: 'commandName', label: 'Command Name', align: 'left', field: row => row.commandName, classes: 'text-no-wrap' },
572+
{ name: 'friendlyName', label: 'Friendly Name', field: row => row.friendlyName ? row.friendlyName[(this.$i18n.locale)] ? row.friendlyName[(this.$i18n.locale)] : row.friendlyName['default'] : '', classes: 'hidden' },
573+
{ name: 'description', label: 'Description', align: 'left', field: row => row.description ? row.description[(this.$i18n.locale)] ? row.description[(this.$i18n.locale)] : row.description.default : '', classes: 'gt-sm' },
574+
{ name: 'spacer', label: 'Spacer' },
575+
{ name: 'favorite', label: 'Icon', classes: 'gt-xs' },
576+
{ name: 'help', label: 'Icon', classes: 'gt-xs' },
577+
{ name: 'execute', label: 'Execute' }
578+
],
579+
historyColumns: [
580+
{ name: 'date', label: 'Date', field: row => date.formatDate(row.date, 'YYYY-MM-DD HH:mm:ss'), classes: 'gt-xs' },
581+
{ name: 'steps', label: 'Steps' },
582+
{ name: 'commandName', label: 'Command Name', align: 'left', classes: 'text-no-wrap' },
583+
{ name: 'spacer', label: 'Spacer' },
584+
{ name: 'results', label: 'Results' },
585+
{ name: 'execute', label: 'Execute' }
500586
],
501587
// table pagination options for scripts table
502588
scriptsPagination: { rowsPerPage: 0 },
@@ -505,7 +591,7 @@ export default {
505591
}
506592
},
507593
computed: {
508-
...mapGetters('lazystore', ['getLanguage', 'getSearch', 'getScriptsArray', 'getDefinitions', 'getCommandMaximized', 'getAlwaysConfirm', 'getHistoryLength', 'getHistory']),
594+
...mapGetters('lazystore', ['getLanguage', 'getSearch', 'getScriptsArray', 'getDefinitions', 'getCommandMaximized', 'getAlwaysConfirm', 'getHistoryLength', 'getHistoryVisible', 'getHistory']),
509595
language: function () {
510596
return this.getLanguage
511597
},
@@ -532,6 +618,14 @@ export default {
532618
historyLength: function () {
533619
return this.getHistoryLength
534620
},
621+
historyVisible: {
622+
get () {
623+
return this.getHistoryVisible
624+
},
625+
set (val) {
626+
this.$store.dispatch('lazystore/setHistoryVisible', val)
627+
}
628+
},
535629
history: {
536630
get () {
537631
return this.getHistory
@@ -541,6 +635,9 @@ export default {
541635
this.$store.dispatch('lazystore/setHistory', history)
542636
}
543637
},
638+
historyWidth: function () {
639+
return this.$q.screen.width
640+
},
544641
resultsColumns: {
545642
get () {
546643
let columns = [
@@ -868,6 +965,7 @@ export default {
868965
}
869966
// Save to history
870967
this.history = {
968+
date: new Date(),
871969
currentCommand: this.currentCommand,
872970
currentCommandMaster: this.currentCommandMaster,
873971
currentWorkflowIndex: this.currentWorkflowIndex,

yarn.lock

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,10 +1089,10 @@
10891089
babel-plugin-dynamic-import-node "^2.3.0"
10901090
babel-plugin-module-resolver "^4.0.0"
10911091

1092-
"@quasar/extras@^1.9.0":
1093-
version "1.9.2"
1094-
resolved "https://registry.yarnpkg.com/@quasar/extras/-/extras-1.9.2.tgz#088b4c6e2d8d0ae625cad311e9c0f9502cab11e2"
1095-
integrity sha512-OP2qTOveQHkTmaxsEhSPhXTs3s0MxGevIjQMZ8e79U3HhlGYSO48wBH2iUrK5c6XlALOq9zqHQJoGt5QnhWdUA==
1092+
"@quasar/extras@^1.9.3":
1093+
version "1.9.3"
1094+
resolved "https://registry.yarnpkg.com/@quasar/extras/-/extras-1.9.3.tgz#dba0c398dd64709a1c0941d0e8dff4655abc8728"
1095+
integrity sha512-9PXvmdxdO1Sa33X3FJ27T4ZBw9DEDnZcyqeGneOMSl/hzNCeEQ8BKk6ycUV9sdib0uH1sPXWEJ9m8v2QFylyqA==
10961096

10971097
10981098
version "1.1.4"
@@ -1651,7 +1651,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
16511651
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
16521652
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
16531653

1654-
ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.5.5, ajv@^6.9.1:
1654+
ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.9.1:
16551655
version "6.12.3"
16561656
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706"
16571657
integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==
@@ -2624,9 +2624,9 @@ caniuse-api@^3.0.0:
26242624
lodash.uniq "^4.5.0"
26252625

26262626
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001061, caniuse-lite@^1.0.30001093:
2627-
version "1.0.30001107"
2628-
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001107.tgz#809360df7a5b3458f627aa46b0f6ed6d5239da9a"
2629-
integrity sha512-86rCH+G8onCmdN4VZzJet5uPELII59cUzDphko3thQFgAQG1RNa+sVLDoALIhRYmflo5iSIzWY3vu1XTWtNMQQ==
2627+
version "1.0.30001109"
2628+
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001109.tgz#a9f3f26a0c3753b063d7acbb48dfb9c0e46f2b19"
2629+
integrity sha512-4JIXRodHzdS3HdK8nSgIqXYLExOvG+D2/EenSvcub2Kp3QEADjo2v2oUn5g0n0D+UNwG9BtwKOyGcSq2qvQXvQ==
26302630

26312631
caseless@~0.12.0:
26322632
version "0.12.0"
@@ -3992,9 +3992,9 @@ [email protected]:
39923992
mime "^2.4.6"
39933993

39943994
electron-to-chromium@^1.3.488:
3995-
version "1.3.512"
3996-
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.512.tgz#620e6731c693ddaaf3750f23dde7f7c4347b7327"
3997-
integrity sha512-y02hdFg7c4jTfREcXf4fRhHLt7BzofMgd7JAKY+u9i62E0D1eIpLQPFo5/eboZL0bIVY9YHZA53+vCGNFREOXA==
3995+
version "1.3.514"
3996+
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.514.tgz#107499c28cb3c09fe6a863c19fc2202d5d9e8e41"
3997+
integrity sha512-8vb8zKIeGlZigeDzNWWthmGeLzo5CC43Lc+CZshMs7UXFVMPNLtXJGa/txedpu3OJFrXXVheBwp9PqOJJlHQ8w==
39983998

39993999
electron-updater@^4.3.1:
40004000
version "4.3.4"
@@ -5194,11 +5194,11 @@ har-schema@^2.0.0:
51945194
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
51955195

51965196
har-validator@~5.1.3:
5197-
version "5.1.3"
5198-
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
5199-
integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
5197+
version "5.1.5"
5198+
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
5199+
integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
52005200
dependencies:
5201-
ajv "^6.5.5"
5201+
ajv "^6.12.3"
52025202
har-schema "^2.0.0"
52035203

52045204
has-ansi@^2.0.0:
@@ -6108,10 +6108,11 @@ javascript-stringify@^2.0.1:
61086108
integrity sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow==
61096109

61106110
jest-worker@^26.0.0:
6111-
version "26.1.0"
6112-
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.1.0.tgz#65d5641af74e08ccd561c240e7db61284f82f33d"
6113-
integrity sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ==
6111+
version "26.2.1"
6112+
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.2.1.tgz#5d630ab93f666b53f911615bc13e662b382bd513"
6113+
integrity sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A==
61146114
dependencies:
6115+
"@types/node" "*"
61156116
merge-stream "^2.0.0"
61166117
supports-color "^7.0.0"
61176118

@@ -10395,9 +10396,9 @@ vue-hot-reload-api@^2.3.0:
1039510396
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
1039610397

1039710398
vue-i18n@^8.0.0:
10398-
version "8.19.0"
10399-
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.19.0.tgz#4326ade6cba7e18b22030ac1a14c59864b6dfc43"
10400-
integrity sha512-jXPsvkmDMkwhjGQEDF6BgGsmJQLjIO1CXJQ1RjZRnU80kzRG+/+277ADFTulAPQSb0hUlrsp4VzEPdeO7lKcRA==
10399+
version "8.20.0"
10400+
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.20.0.tgz#c81b01d6541182b28565316cafe881b65a3c0f1b"
10401+
integrity sha512-ZiAOoeR4d/JtKpbjipx3I80ey7cYG1ki5gQ7HwzWm4YFio9brA15BEYHjalEoBaEfzF5OBEZP+Y2MvAaWnyXXg==
1040110402

1040210403
1040310404
version "15.9.2"

0 commit comments

Comments
 (0)