diff --git a/src/components/dialog/content/setting/ExtensionPanel.vue b/src/components/dialog/content/setting/ExtensionPanel.vue
index f47ed5ebb2..3fd2460937 100644
--- a/src/components/dialog/content/setting/ExtensionPanel.vue
+++ b/src/components/dialog/content/setting/ExtensionPanel.vue
@@ -29,12 +29,19 @@
+
+
+
+
{{ slotProps.data.name }}
@@ -42,6 +49,7 @@
v-if="extensionStore.isCoreExtension(slotProps.data.name)"
value="Core"
/>
+
>([])
+
const filters = ref({
global: { value: '', matchMode: FilterMatchMode.CONTAINS }
})
@@ -97,6 +110,22 @@ const settingStore = useSettingStore()
const editingEnabledExtensions = ref>({})
+const filteredExtensions = computed(() => {
+ const extensions = extensionStore.extensions
+ switch (filterType.value) {
+ case 'Core':
+ return extensions.filter((ext) =>
+ extensionStore.isCoreExtension(ext.name)
+ )
+ case 'Custom':
+ return extensions.filter(
+ (ext) => !extensionStore.isCoreExtension(ext.name)
+ )
+ default:
+ return extensions
+ }
+})
+
onMounted(() => {
extensionStore.extensions.forEach((ext) => {
editingEnabledExtensions.value[ext.name] =
@@ -163,6 +192,33 @@ const applyChanges = () => {
const menu = ref>()
const contextMenuItems = [
+ {
+ label: 'Enable Selected',
+ icon: 'pi pi-check',
+ command: async () => {
+ selectedExtensions.value.forEach((ext) => {
+ if (!extensionStore.isExtensionReadOnly(ext.name)) {
+ editingEnabledExtensions.value[ext.name] = true
+ }
+ })
+ await updateExtensionStatus()
+ }
+ },
+ {
+ label: 'Disable Selected',
+ icon: 'pi pi-times',
+ command: async () => {
+ selectedExtensions.value.forEach((ext) => {
+ if (!extensionStore.isExtensionReadOnly(ext.name)) {
+ editingEnabledExtensions.value[ext.name] = false
+ }
+ })
+ await updateExtensionStatus()
+ }
+ },
+ {
+ separator: true
+ },
{
label: 'Enable All',
icon: 'pi pi-check',