11<script setup lang="ts">
22import { computed , reactive , type PropType } from ' vue'
33import * as z from ' zod'
4- import { type CreateFileParams , type CreateFolderParams , type RenameFileParams , type StudioAction , type TreeItem , ContentFileExtension } from ' ../../../types'
4+ import { type CreateFileParams , type CreateFolderParams , type RenameFileParams , type StudioAction , type TreeItem , ContentFileExtension , MediaFileExtension } from ' ../../../types'
55import { joinURL , withLeadingSlash , withoutLeadingSlash } from ' ufo'
66import { contentFileExtensions } from ' ../../../utils/content'
77import { useStudio } from ' ../../../composables/useStudio'
@@ -10,6 +10,8 @@ import { stripNumericPrefix } from '../../../utils/string'
1010import { defineShortcuts } from ' #imports'
1111import { upperFirst } from ' scule'
1212import { getFileExtension } from ' ../../../utils/file'
13+ import { TreeRootId } from ' ../../../utils/tree'
14+ import { mediaFileExtensions } from ' ../../../utils/media'
1315
1416const { context } = useStudio ()
1517
@@ -35,8 +37,16 @@ const props = defineProps({
3537})
3638
3739const originalName = computed (() => props .renamedItem ?.name || ' ' )
40+ const isMedia = computed (() => props .renamedItem ?.id .startsWith (TreeRootId .Media ))
3841const originalExtension = computed (() => {
3942 const ext = getFileExtension (props .renamedItem ?.id || ' ' )
43+ if (isMedia .value ) {
44+ if (ext && mediaFileExtensions .includes (ext as MediaFileExtension )) {
45+ return ext as MediaFileExtension
46+ }
47+ return null
48+ }
49+
4050 if (ext && contentFileExtensions .includes (ext as ContentFileExtension )) {
4151 return ext as ContentFileExtension
4252 }
@@ -49,7 +59,7 @@ const schema = z.object({
4959 .min (1 , ' Name cannot be empty' )
5060 .refine ((name : string ) => ! name .endsWith (' .' ), ' Name cannot end with "."' )
5161 .refine ((name : string ) => ! name .startsWith (' /' ), ' Name cannot start with "/"' ),
52- extension: z .optional ( z . enum (ContentFileExtension )),
62+ extension: z .enum ([ ... Object . values (ContentFileExtension ), ... Object . values ( MediaFileExtension )]). nullish ( ),
5363})
5464
5565type Schema = z .output <typeof schema >
@@ -216,7 +226,8 @@ function onSubmit() {
216226 </template >
217227 <USelect
218228 v-model =" state.extension"
219- :items =" contentFileExtensions"
229+ :items =" isMedia ? mediaFileExtensions : contentFileExtensions"
230+ :disabled =" isMedia"
220231 variant =" soft"
221232 class =" w-18"
222233 />
0 commit comments