beuiSidebarInsert function

List<BeuiSidebarResource> beuiSidebarInsert(
  1. List<BeuiSidebarResource> items,
  2. BeuiSidebarResource resource,
  3. String? targetId,
  4. BeuiSidebarResourceDropPosition position,
)

Insert resource relative to targetId / position.

Implementation

List<BeuiSidebarResource> beuiSidebarInsert(
  List<BeuiSidebarResource> items,
  BeuiSidebarResource resource,
  String? targetId,
  BeuiSidebarResourceDropPosition position,
) {
  if (targetId == null) return [...items, resource];

  final next = <BeuiSidebarResource>[];
  for (final item in items) {
    if (item.id == targetId) {
      switch (position) {
        case BeuiSidebarResourceDropPosition.before:
          next
            ..add(resource)
            ..add(item);
        case BeuiSidebarResourceDropPosition.after:
          next
            ..add(item)
            ..add(resource);
        case BeuiSidebarResourceDropPosition.inside:
          next.add(item.copyWith(children: [...?item.children, resource]));
      }
      continue;
    }
    final kids = item.children;
    if (kids != null && kids.isNotEmpty) {
      next.add(
        item.copyWith(
          children: beuiSidebarInsert(kids, resource, targetId, position),
        ),
      );
    } else {
      next.add(item);
    }
  }
  return next;
}