From 707ea116aa7c66a884d8ad21a0c71c983a6147ec Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 24 Feb 2025 11:13:01 +0530 Subject: [PATCH] Create insomnia_item.dart --- .../lib/models/insomnia_item.dart | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 packages/insomnia_collection/lib/models/insomnia_item.dart diff --git a/packages/insomnia_collection/lib/models/insomnia_item.dart b/packages/insomnia_collection/lib/models/insomnia_item.dart new file mode 100644 index 00000000..c906baf9 --- /dev/null +++ b/packages/insomnia_collection/lib/models/insomnia_item.dart @@ -0,0 +1,102 @@ +import 'insomnia_collection.dart'; + +enum ResourceType { + workspace, + environment, + request_group, + cookie_jar, + request, + websocket_payload, + api_spec +} + +class InsomniaItem { + const InsomniaItem({ + this.id, + this.type, + this.resource, + this.children, + }); + + final String? id; + final ResourceType? type; + final Resource? resource; + final List? children; + + factory InsomniaItem.fromInsomniaCollection( + InsomniaCollection? collection, + ) { + if (collection?.resources == null) { + return InsomniaItem(); + } + final resources = collection!.resources!; + final resourceMap = {for (var v in resources) v.id!: v}; + Map> childrenMap = {}; + for (var item in resources) { + if (item.parentId != null && item.id != null) { + if (childrenMap.containsKey(item.parentId)) { + childrenMap[item.parentId]!.add(item.id!); + } else { + childrenMap[item.parentId!] = [item.id!]; + } + } + } + var wksp; + for (var item in resources) { + if (item.type == ResourceType.workspace.name) { + wksp = InsomniaItem( + id: item.id, + type: ResourceType.workspace, + resource: item, + children: getInsomniaItemChildren( + childrenMap[item.id], + childrenMap, + resourceMap, + ), + ); + break; + } + } + return wksp; + } +} + +List? getInsomniaItemChildren( + List? ids, + Map> childrenMap, + Map resourceMap, +) { + if (ids == null) { + return null; + } + List children = []; + for (var itemId in ids) { + var resource = resourceMap[itemId]; + ResourceType? type; + try { + type = ResourceType.values.byName(resource?.type ?? ''); + } catch (e) { + type = null; + } + if (childrenMap.containsKey(itemId)) { + children.add(InsomniaItem( + id: itemId, + type: type, + resource: resource, + children: getInsomniaItemChildren( + childrenMap[itemId], + childrenMap, + resourceMap, + ), + )); + } else { + children.add(InsomniaItem( + id: itemId, + type: type, + resource: resource, + children: null, + )); + } + } + return children; +}