Skip to content

Commit 76b85e4

Browse files
committed
feat(folders): add default language selection to folder context menu
1 parent 396e8ad commit 76b85e4

2 files changed

Lines changed: 44 additions & 7 deletions

File tree

src/renderer/components/sidebar/folders/Tree.vue

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import type { Ref } from 'vue'
33
import type { PerfectScrollbarExpose } from 'vue3-perfect-scrollbar'
44
import type { Node } from './types'
5+
import { languages } from '@/components/editor/languages'
56
import * as ContextMenu from '@/components/ui/shadcn/context-menu'
67
import { useApp, useDialog, useFolders, useSnippets } from '@/composables'
78
import { i18n } from '@/electron'
@@ -28,8 +29,13 @@ const props = withDefaults(defineProps<Props>(), {
2829
2930
const emit = defineEmits<Emits>()
3031
31-
const { createFolderAndSelect, deleteFolder, renameFolderId, folders }
32-
= useFolders()
32+
const {
33+
createFolderAndSelect,
34+
deleteFolder,
35+
renameFolderId,
36+
folders,
37+
updateFolder,
38+
} = useFolders()
3339
const { state } = useApp()
3440
const { clearSnippetsState } = useSnippets()
3541
@@ -105,6 +111,16 @@ function onRenameFolder() {
105111
}, 100)
106112
}
107113
114+
function onSelectLanguage(language: string) {
115+
if (!contextNodeId.value) {
116+
return
117+
}
118+
119+
updateFolder(contextNodeId.value, {
120+
defaultLanguage: language,
121+
})
122+
}
123+
108124
provide(treeKeys, {
109125
clickNode,
110126
contextMenu,
@@ -161,6 +177,25 @@ provide(treeKeys, {
161177
<ContextMenu.Item @click="onDeleteFolder">
162178
{{ i18n.t("action.delete.common") }}
163179
</ContextMenu.Item>
180+
<ContextMenu.Separator />
181+
<ContextMenu.Sub>
182+
<ContextMenu.SubTrigger>
183+
{{ i18n.t("action.defaultLanguage") }}
184+
</ContextMenu.SubTrigger>
185+
<ContextMenu.SubContent>
186+
<PerfectScrollbar :options="{ minScrollbarLength: 20 }">
187+
<div class="max-h-[250px]">
188+
<ContextMenu.Item
189+
v-for="language in languages"
190+
:key="language.value"
191+
@click="onSelectLanguage(language.value)"
192+
>
193+
{{ language.name }}
194+
</ContextMenu.Item>
195+
</div>
196+
</PerfectScrollbar>
197+
</ContextMenu.SubContent>
198+
</ContextMenu.Sub>
164199
</ContextMenu.Content>
165200
</ContextMenu.Root>
166201
</PerfectScrollbar>

src/renderer/composables/useSnippets.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import type {
2-
SnippetContentsAdd,
2+
SnippetContentsUpdate,
33
SnippetsQuery,
44
SnippetsResponse,
55
SnippetsUpdate,
66
} from '~/renderer/services/api/generated'
77
import { i18n } from '@/electron'
88
import { api } from '~/renderer/services/api'
9+
import { useApp, useDialog, useFolders } from '.'
910
import { LibraryFilter } from './types'
10-
import { useApp } from './useApp'
11-
import { useDialog } from './useDialog'
1211

1312
const { state, saveStateSnapshot, restoreStateSnapshot, isFocusedSnippetName }
1413
= useApp()
14+
const { folders } = useFolders()
1515

1616
const selectedSnippetIds = ref<number[]>([])
1717
const lastSelectedSnippetId = ref<number | undefined>()
@@ -103,6 +103,8 @@ async function getSnippets(query?: SnippetsQuery) {
103103

104104
async function createSnippet() {
105105
try {
106+
const folder = folders.value?.find(f => f.id === state.folderId)
107+
106108
const { data } = await api.snippets.postSnippets({
107109
name: i18n.t('snippet.untitled'),
108110
folderId: state.folderId || null,
@@ -111,7 +113,7 @@ async function createSnippet() {
111113
await api.snippets.postSnippetsByIdContents(String(data.id), {
112114
label: `${i18n.t('fragment')} 1`,
113115
value: '',
114-
language: 'plain_text',
116+
language: folder?.defaultLanguage || 'plain_text',
115117
})
116118

117119
if (
@@ -215,7 +217,7 @@ async function updateSnippets(snippetIds: number[], data: SnippetsUpdate[]) {
215217
async function updateSnippetContent(
216218
snippetId: number,
217219
contentId: number,
218-
data: SnippetContentsAdd,
220+
data: SnippetContentsUpdate,
219221
) {
220222
await api.snippets.patchSnippetsByIdContentsByContentId(
221223
String(snippetId),

0 commit comments

Comments
 (0)