@@ -21,6 +21,7 @@ import {
2121 Pages ,
2222 ROOT_FOLDER_ID ,
2323 findParentFolderByChildId ,
24+ getFolderById ,
2425} from "@webstudio-is/sdk" ;
2526import { nanoid } from "nanoid" ;
2627import { useCallback , useState , type FocusEventHandler } from "react" ;
@@ -82,16 +83,14 @@ const validateValues = (
8283 return errors ;
8384} ;
8485
85- const toFormValues = (
86- folderId : Folder [ "id" ] ,
87- folders : Array < Folder >
88- ) : Values => {
89- const folder = folders . find ( ( { id } ) => id === folderId ) ;
86+ const toFormValues = ( folderId : Folder [ "id" ] , pages : Pages ) : Values => {
87+ const { folders } = pages ;
88+ const folder = folders . get ( folderId ) ;
9089 const parentFolder = findParentFolderByChildId ( folderId , folders ) ;
9190 return {
9291 name : folder ?. name ?? "" ,
9392 slug : folder ?. slug ?? "" ,
94- parentFolderId : parentFolder ?. id ?? ROOT_FOLDER_ID ,
93+ parentFolderId : parentFolder ?. id ?? pages . rootFolderId ,
9594 } ;
9695} ;
9796
@@ -211,6 +210,7 @@ export const NewFolderSettings = ({
211210
212211 const [ values , setValues ] = useState < Values > ( {
213212 ...fieldDefaultValues ,
213+ parentFolderId : pages ?. rootFolderId ?? fieldDefaultValues . parentFolderId ,
214214 slug : nameToSlug ( fieldDefaultValues . name ) ,
215215 } ) ;
216216
@@ -292,15 +292,15 @@ const createFolder = (folderId: Folder["id"], values: Values) => {
292292 if ( pages === undefined ) {
293293 return ;
294294 }
295- pages . folders . push ( {
295+ pages . folders . set ( folderId , {
296296 id : folderId ,
297297 name : values . name ,
298298 slug : values . slug ,
299299 children : [ ] ,
300300 } satisfies Folder ) ;
301- const parentFolder = pages . folders . find (
302- ( { id } ) => id === values . parentFolderId
303- ) ;
301+ const parentFolder =
302+ getFolderById ( pages , values . parentFolderId ) ??
303+ getFolderById ( pages , pages . rootFolderId ) ;
304304 parentFolder ?. children . push ( folderId ) ;
305305 } ) ;
306306} ;
@@ -310,8 +310,8 @@ const updateFolder = (folderId: Folder["id"], values: Partial<Values>) => {
310310 if ( pages === undefined ) {
311311 return ;
312312 }
313- const folder = pages . folders . find ( ( folder ) => folder . id === folderId ) ;
314- if ( folder === undefined ) {
313+ const folder = getFolderById ( pages , folderId ) ;
314+ if ( folder === undefined || folderId === pages . rootFolderId ) {
315315 return ;
316316 }
317317 if ( values . name !== undefined ) {
@@ -321,11 +321,7 @@ const updateFolder = (folderId: Folder["id"], values: Partial<Values>) => {
321321 folder . slug = values . slug ;
322322 }
323323 if ( values . parentFolderId !== undefined ) {
324- registerFolderChildMutable (
325- pages . folders ,
326- folderId ,
327- values . parentFolderId
328- ) ;
324+ registerFolderChildMutable ( pages , folderId , values . parentFolderId ) ;
329325 }
330326 } ) ;
331327} ;
@@ -342,12 +338,13 @@ export const FolderSettings = ({
342338 folderId : string ;
343339} ) => {
344340 const pages = useStore ( $pages ) ;
345- const folder = pages ?. folders . find ( ( { id } ) => id === folderId ) ;
341+ const folder =
342+ pages === undefined ? undefined : getFolderById ( pages , folderId ) ;
346343 const [ unsavedValues , setUnsavedValues ] = useState < Partial < Values > > ( { } ) ;
347344 const isDesignMode = useStore ( $isDesignMode ) ;
348345
349346 const values : Values = {
350- ...( pages ? toFormValues ( folderId , pages . folders ) : fieldDefaultValues ) ,
347+ ...( pages ? toFormValues ( folderId , pages ) : fieldDefaultValues ) ,
351348 ...unsavedValues ,
352349 } ;
353350
0 commit comments