Skip to content

Commit edb282f

Browse files
committed
W
1 parent cacdcfc commit edb282f

File tree

3 files changed

+67
-19
lines changed

3 files changed

+67
-19
lines changed

core/frontend/src/components/common/JsonEditor.vue

+1-8
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
<v-divider />
1515

16+
<slot name="controls" />
1617
<v-btn
1718
v-tooltip="save_tooltip"
1819
class="editor-control"
@@ -43,14 +44,6 @@ export default {
4344
type: Object,
4445
required: true,
4546
},
46-
schema: {
47-
type: Object,
48-
default: () => ({}),
49-
},
50-
schemaRefs: {
51-
type: Object,
52-
default: () => ({}),
53-
},
5447
},
5548
data() {
5649
return {

core/frontend/src/components/kraken/modals/ExtensionDetailsModal.vue

+57-7
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353

5454
v-bind="attrs"
5555
v-on="on"
56-
@click="$emit('clicked', extension.identifier, selected_version, is_installed)"
56+
@click="performAction"
5757
>
5858
{{ is_installed ? 'Uninstall' : 'Install' }}
5959
</v-btn>
@@ -115,7 +115,22 @@
115115
v-model="editing_permissions"
116116
style="width:100%; height:100%"
117117
@save="onEditingPermissionsSave"
118-
/>
118+
>
119+
<template
120+
v-if="is_reset_editing_permissions_visible"
121+
#controls
122+
>
123+
<v-btn
124+
v-tooltip="'Reset to default permissions'"
125+
class="editor-control"
126+
icon
127+
color="white"
128+
@click="onResetToDefaultPermissions"
129+
>
130+
<v-icon>mdi-restore</v-icon>
131+
</v-btn>
132+
</template>
133+
</json-editor>
119134
</v-card>
120135
</v-expansion-panel-content>
121136
</v-expansion-panel>
@@ -162,6 +177,7 @@ export default Vue.extend({
162177
return {
163178
selected_version: '' as string | null | undefined,
164179
editing_permissions: '' as string | JSONValue,
180+
custom_permissions: {} as Record<string, JSONValue>,
165181
}
166182
},
167183
computed: {
@@ -213,11 +229,19 @@ export default Vue.extend({
213229
),
214230
]
215231
},
232+
is_reset_editing_permissions_visible(): boolean {
233+
if (!this.selected_version) {
234+
return false
235+
}
236+
237+
return JSON.stringify(this.editing_permissions) !== JSON.stringify(this.selected?.permissions)
238+
},
216239
},
217240
watch: {
218241
extension() {
219242
this.selected_version = this.getLatestTag()
220243
this.editing_permissions = this.getVersionPermissions()
244+
this.custom_permissions = {}
221245
},
222246
selected_version() {
223247
this.editing_permissions = this.getVersionPermissions()
@@ -238,15 +262,36 @@ export default Vue.extend({
238262
return 'Select a version to view permissions'
239263
}
240264
241-
const versions = this.extension?.versions
242-
if (versions && this.selected_version in versions) {
243-
return versions[this.selected_version].permissions
265+
if (this.selected) {
266+
return this.custom_permissions[this.selected_version] ?? this.selected.permissions
244267
}
245268
246269
return 'No permissions required'
247270
},
248-
onEditingPermissionsSave() {
249-
console.log('Permissions saved')
271+
onEditingPermissionsSave(json: JSONValue) {
272+
if (this.selected_version) {
273+
this.editing_permissions = json
274+
this.custom_permissions[this.selected_version] = json
275+
}
276+
},
277+
onResetToDefaultPermissions() {
278+
if (this.selected_version) {
279+
delete this.custom_permissions[this.selected_version]
280+
this.editing_permissions = this.getVersionPermissions()
281+
}
282+
},
283+
performAction() {
284+
if (!this.selected_version) {
285+
return
286+
}
287+
288+
this.$emit(
289+
'clicked',
290+
this.extension.identifier,
291+
this.selected_version,
292+
JSON.stringify(this.custom_permissions[this.selected_version]),
293+
this.is_installed,
294+
)
250295
},
251296
},
252297
})
@@ -280,6 +325,11 @@ div.readme ul {
280325
margin-left: 20px;
281326
}
282327
328+
.editor-control {
329+
margin: 0;
330+
opacity: 0.7;
331+
}
332+
283333
.extension-creators {
284334
flex-grow: 1;
285335
margin-left: 10px;

core/frontend/src/views/ExtensionManagerView.vue

+9-4
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,12 @@ export default Vue.extend({
532532
this.status_text = ''
533533
})
534534
},
535-
async performActionFromModal(identifier: string, tag: string, isInstalled: boolean) {
535+
async performActionFromModal(
536+
identifier: string,
537+
tag: string,
538+
permissions: string | undefined,
539+
isInstalled: boolean,
540+
) {
536541
if (isInstalled) {
537542
const ext = this.installed_extensions[identifier]
538543
if (!ext) {
@@ -541,10 +546,10 @@ export default Vue.extend({
541546
this.show_dialog = false
542547
await this.uninstall(ext)
543548
} else {
544-
await this.installFromSelected(tag)
549+
await this.installFromSelected(tag, permissions)
545550
}
546551
},
547-
async installFromSelected(tag: string) {
552+
async installFromSelected(tag: string, permissions: string | undefined) {
548553
if (!this.selected_extension) {
549554
return
550555
}
@@ -555,7 +560,7 @@ export default Vue.extend({
555560
tag,
556561
true,
557562
JSON.stringify(this.selected_extension?.versions[tag].permissions),
558-
'',
563+
permissions ?? '',
559564
)
560565
},
561566
async uninstall(extension: InstalledExtensionData) {

0 commit comments

Comments
 (0)