@@ -57,8 +57,10 @@ local function select_assets(callback)
57
57
end
58
58
59
59
--- Shows a picker to select a folder.
60
+ --- @param assetsDir string
61
+ --- @param deleteMode boolean
60
62
--- @param callback function (string )| nil
61
- local function select_folder (assetsDir , callback )
63
+ local function select_folder (assetsDir , deleteMode , callback )
62
64
local folders = util .shell ({
63
65
" fd" ,
64
66
" --type" ,
@@ -75,17 +77,49 @@ local function select_folder(assetsDir, callback)
75
77
assetsDir ,
76
78
})
77
79
78
- table.insert (folders , 1 , assetsDir )
80
+ if not deleteMode then
81
+ table.insert (folders , 1 , assetsDir )
82
+ table.insert (folders , 2 , " " )
83
+ if # folders > 2 then
84
+ table.insert (folders , 3 , " " )
85
+ end
86
+ end
79
87
folders = clean_up_paths (folders )
80
88
81
89
local titles = util .select (folders , function (folder )
82
90
local trimmed = folder :gsub (assetsDir .. " /" , " " )
83
91
return trimmed
84
92
end )
85
- titles [1 ] = " [Root]"
93
+
94
+ if not deleteMode then
95
+ titles [1 ] = " [Root]"
96
+ titles [2 ] = " [Create New Folder]"
97
+ if # titles > 2 then
98
+ titles [3 ] = " "
99
+ end
100
+ end
86
101
87
102
pickers .show (" Select Folder" , titles , function (_ , index )
88
- util .call (callback , folders [index ])
103
+ if deleteMode then
104
+ util .call (callback , folders [index ])
105
+ return
106
+ end
107
+
108
+ if index == 2 then
109
+ pickers .close ()
110
+
111
+ local newFolder = vim .fn .input (" Enter folder name: " )
112
+ if newFolder == " " then
113
+ notifications .send_error (" Invalid folder name" )
114
+ return
115
+ end
116
+
117
+ local path = vim .fs .joinpath (assetsDir , newFolder )
118
+ util .shell ({ " mkdir" , " -p" , path })
119
+ util .call (callback , path )
120
+ elseif index ~= 3 then
121
+ util .call (callback , folders [index ])
122
+ end
89
123
end )
90
124
end
91
125
@@ -231,14 +265,33 @@ function M.create_color(name, color, path)
231
265
notifications .send (" Color '" .. name .. " ' has been added" )
232
266
end
233
267
268
+ --- Shows a picker to delete a folder.
269
+ function M .delete_folder_picker ()
270
+ if not validate_if_fd_installed () then
271
+ return
272
+ end
273
+
274
+ select_assets (function (asset )
275
+ select_folder (asset , true , function (path )
276
+ local confirm = vim .fn .confirm (" Are you sure you want to delete: " .. path .. " ?" , " &Yes\n &No" , 2 ) == 1
277
+
278
+ if confirm then
279
+ util .shell ({ " rm" , " -rf" , path })
280
+ pickers .close ()
281
+ notifications .send (" Folder deleted: " .. path )
282
+ end
283
+ end )
284
+ end )
285
+ end
286
+
234
287
--- Shows a wizard to create a new asset.
235
288
function M .create_new_asset_picker ()
236
289
if not validate_if_fd_installed () then
237
290
return
238
291
end
239
292
240
293
select_assets (function (asset )
241
- select_folder (asset , function (path )
294
+ select_folder (asset , false , function (path )
242
295
select_asset_type (function (assetType )
243
296
if assetType == " Image" then
244
297
local filename = vim .fn .input (" Enter filename (e.g. image.svg): " )
260
313
261
314
--- Shows a picker with all the assets in the project.
262
315
--- Opens the asset in Finder or Quick Look.
263
- function M .show_asset_picker ()
316
+ --- @param reveal boolean reveal in Finder
317
+ function M .show_asset_picker (reveal )
264
318
if not validate_if_fd_installed () then
265
319
return
266
320
end
@@ -279,7 +333,7 @@ function M.show_asset_picker()
279
333
pickers .show (" Show Asset" , assets , function (asset , _ )
280
334
local isImage = string.find (asset .value , " %.imageset" ) or string.find (asset .value , " %.appiconset" )
281
335
282
- if isImage then
336
+ if isImage and not reveal then
283
337
vim .fn .jobstart ({ " qlmanage" , " -p" , asset .value }, {
284
338
detach = true ,
285
339
on_exit = function () end ,
@@ -333,9 +387,10 @@ function M.delete_asset_picker()
333
387
334
388
if confirm then
335
389
util .shell ({ " rm" , " -rf" , asset .value })
390
+ pickers .close ()
336
391
notifications .send (" Asset deleted: " .. asset .value )
337
392
end
338
- end , { close_on_select = true } )
393
+ end )
339
394
end
340
395
341
396
--- Shows the Assets Manager with all available actions.
@@ -347,12 +402,20 @@ function M.show_assets_manager()
347
402
local titles = {
348
403
" Create New Asset" ,
349
404
" Delete Asset" ,
350
- " Show Asset" ,
405
+ " Delete Folder" ,
406
+ " Preview Asset" ,
407
+ " Reveal Asset in Finder" ,
351
408
}
352
409
local actions = {
353
410
M .create_new_asset_picker ,
354
411
M .delete_asset_picker ,
355
- M .show_asset_picker ,
412
+ M .delete_folder_picker ,
413
+ function ()
414
+ M .show_asset_picker (false )
415
+ end ,
416
+ function ()
417
+ M .show_asset_picker (true )
418
+ end ,
356
419
}
357
420
358
421
pickers .show (" Assets Manager" , titles , function (_ , selectedIndex )
0 commit comments