From d294e6db395f06ccc3562fad10df25fef7bc99fd Mon Sep 17 00:00:00 2001 From: yahu1031 Date: Thu, 14 Sep 2023 15:39:03 +0530 Subject: [PATCH] fix: Editor url, some index issues, project view json parsing issue --- lib/kanban/Provider/board_list_provider.dart | 1 + lib/kanban/Provider/list_item_provider.dart | 2 +- lib/provider/issues_provider.dart | 35 ++++--- lib/provider/my_issues_provider.dart | 95 +++++++++++-------- .../ProjectDetail/IssuesTab/create_issue.dart | 6 +- .../ProjectDetail/IssuesTab/issue_detail.dart | 2 +- lib/utils/editor.dart | 10 +- 7 files changed, 88 insertions(+), 63 deletions(-) diff --git a/lib/kanban/Provider/board_list_provider.dart b/lib/kanban/Provider/board_list_provider.dart index fd98a48..5cceb40 100644 --- a/lib/kanban/Provider/board_list_provider.dart +++ b/lib/kanban/Provider/board_list_provider.dart @@ -23,6 +23,7 @@ class BoardListProvider extends ChangeNotifier { required VoidCallback setstate}) { if (!context.mounted) return; var prov = ref.read(ProviderList.boardProvider); + if(prov.board.lists.length <= listIndex) return; prov.board.lists[listIndex].context = context; var box = context.findRenderObject() as RenderBox; var location = box.localToGlobal(Offset.zero); diff --git a/lib/kanban/Provider/list_item_provider.dart b/lib/kanban/Provider/list_item_provider.dart index c4c7d9e..28ffef0 100644 --- a/lib/kanban/Provider/list_item_provider.dart +++ b/lib/kanban/Provider/list_item_provider.dart @@ -16,7 +16,7 @@ class ListItemProvider extends ChangeNotifier { required VoidCallback setsate}) { if (!context.mounted) return; var prov = ref.read(ProviderList.boardProvider); - + if (prov.board.lists.length <= listIndex) return; prov.board.lists[listIndex].items[itemIndex].context = context; var box = context.findRenderObject() as RenderBox; var location = box.localToGlobal(Offset.zero); diff --git a/lib/provider/issues_provider.dart b/lib/provider/issues_provider.dart index 26e5c9c..d2a6f56 100644 --- a/lib/provider/issues_provider.dart +++ b/lib/provider/issues_provider.dart @@ -1248,19 +1248,27 @@ class IssuesProvider extends ChangeNotifier { ); issueView = response.data["view_props"]; log("project view=>${response.data["view_props"]}"); - issues.projectView = issueView['display_filters']['layout'] == 'list' - ? ProjectView.list - : issueView['issueView'] == 'calendar' - ? ProjectView.calendar - : issueView['issueView'] == 'spreadsheet' - ? ProjectView.spreadsheet - : ProjectView.kanban; - issues.groupBY = - Issues.toGroupBY(issueView["display_filters"]["group_by"]); - issues.orderBY = - Issues.toOrderBY(issueView["display_filters"]["order_by"]); - issues.issueType = - Issues.toIssueType(issueView["display_filters"]["type"]); + if (issueView.containsKey('display_filters')) { + issues.projectView = issueView['display_filters']['layout'] == 'list' + ? ProjectView.list + : issueView['issueView'] == 'calendar' + ? ProjectView.calendar + : issueView['issueView'] == 'spreadsheet' + ? ProjectView.spreadsheet + : ProjectView.kanban; + issues.groupBY = + Issues.toGroupBY(issueView["display_filters"]["group_by"]); + issues.orderBY = + Issues.toOrderBY(issueView["display_filters"]["order_by"]); + issues.issueType = + Issues.toIssueType(issueView["display_filters"]["type"]); + showEmptyStates = issueView["display_filters"]["show_empty_groups"] ?? false; + } else { + issues.projectView = ProjectView.kanban; + issues.groupBY = GroupBY.state; + issues.orderBY = OrderBY.startDate; + issues.issueType = IssueType.all; + } issues.filters.priorities = issueView["filters"]["priority"] ?? []; issues.filters.states = issueView["filters"]["state"] ?? []; issues.filters.assignees = issueView["filters"]["assignees"] ?? []; @@ -1270,7 +1278,6 @@ class IssuesProvider extends ChangeNotifier { issues.filters.startDate = issueView["filters"]["start_date"] ?? []; issues.filters.subscriber = issueView["filters"]["subscriber"] ?? []; issues.filters.stateGroup = issueView["filters"]["state_group"] ?? []; - showEmptyStates = issueView["display_filters"]["show_empty_groups"]; projectViewState = StateEnum.success; notifyListeners(); diff --git a/lib/provider/my_issues_provider.dart b/lib/provider/my_issues_provider.dart index c179f9c..c0dc9f6 100644 --- a/lib/provider/my_issues_provider.dart +++ b/lib/provider/my_issues_provider.dart @@ -135,19 +135,30 @@ class MyIssuesProvider extends ChangeNotifier { ); myIssueView = response.data["view_props"]; log("project view=>${response.data["view_props"]}"); - issues.projectView = myIssueView["display_filters"]['layout'] == 'list' - ? ProjectView.list - : myIssueView["display_filters"]['layout'] == 'calendar' - ? ProjectView.calendar - : myIssueView["display_filters"]['layout'] == 'spreadsheet' - ? ProjectView.spreadsheet - : ProjectView.kanban; - issues.groupBY = - Issues.toGroupBY(myIssueView["display_filters"]['group_by']); - issues.orderBY = - Issues.toOrderBY(myIssueView["display_filters"]['order_by']); - issues.issueType = - Issues.toIssueType(myIssueView["display_filters"]['type']); + if (myIssueView.containsKey('display_filters')) { + issues.projectView = (myIssueView["display_filters"] as Map) + .containsKey('layout') + ? (myIssueView["display_filters"]['layout'] == 'list' + ? ProjectView.list + : myIssueView["display_filters"]['layout'] == 'calendar' + ? ProjectView.calendar + : myIssueView["display_filters"]['layout'] == 'spreadsheet' + ? ProjectView.spreadsheet + : ProjectView.kanban) + : ProjectView.kanban; + issues.groupBY = + Issues.toGroupBY(myIssueView["display_filters"]['group_by']); + issues.orderBY = + Issues.toOrderBY(myIssueView["display_filters"]['order_by']); + issues.issueType = + Issues.toIssueType(myIssueView["display_filters"]['type']); + showEmptyStates = myIssueView["display_filters"]["show_empty_groups"] ?? true; + } else { + issues.projectView = ProjectView.kanban; + issues.groupBY = GroupBY.state; + issues.orderBY = OrderBY.manual; + issues.issueType = IssueType.all; + } issues.filters.priorities = myIssueView["filters"]["priority"] ?? []; issues.filters.stateGroup = myIssueView["filters"]["state_group"] ?? []; // issues.filters.assignees = myIssueView["filters"]["assignees"] ?? []; @@ -156,34 +167,36 @@ class MyIssuesProvider extends ChangeNotifier { issues.filters.startDate = myIssueView["filters"]["start_date"] ?? []; // issues.displayProperties = myIssueView["displayProperties"]; issues.filters.targetDate = myIssueView["filters"]["target_date"] ?? []; - showEmptyStates = myIssueView["display_filters"]["show_empty_groups"]; - issues.displayProperties.assignee = - myIssueView['display_properties']['assignee'] ?? false; - issues.displayProperties.dueDate = - myIssueView['display_properties']['due_date'] ?? false; - issues.displayProperties.id = - myIssueView['display_properties']['key'] ?? false; - issues.displayProperties.label = - myIssueView['display_properties']['labels'] ?? false; - issues.displayProperties.state = - myIssueView['display_properties']['state'] ?? false; - issues.displayProperties.subIsseCount = - myIssueView['display_properties']['sub_issue_count'] ?? false; - issues.displayProperties.linkCount = - myIssueView['display_properties']['link'] ?? false; - issues.displayProperties.attachmentCount = - myIssueView['display_properties']['attachment_count'] ?? false; - issues.displayProperties.priority = - myIssueView['display_properties']['priority'] ?? false; - issues.displayProperties.estimate = - myIssueView['display_properties']['estimate'] ?? false; - issues.displayProperties.startDate = - myIssueView['display_properties']['start_date'] ?? false; - issues.displayProperties.createdOn = - myIssueView['display_properties']['created_on'] ?? false; - issues.displayProperties.updatedOn = - myIssueView['display_properties']['updated_on'] ?? false; - + if (myIssueView.containsKey('display_properties')) { + issues.displayProperties.assignee = + myIssueView['display_properties']['assignee'] ?? false; + issues.displayProperties.dueDate = + myIssueView['display_properties']['due_date'] ?? false; + issues.displayProperties.id = + myIssueView['display_properties']['key'] ?? false; + issues.displayProperties.label = + myIssueView['display_properties']['labels'] ?? false; + issues.displayProperties.state = + myIssueView['display_properties']['state'] ?? false; + issues.displayProperties.subIsseCount = + myIssueView['display_properties']['sub_issue_count'] ?? false; + issues.displayProperties.linkCount = + myIssueView['display_properties']['link'] ?? false; + issues.displayProperties.attachmentCount = + myIssueView['display_properties']['attachment_count'] ?? false; + issues.displayProperties.priority = + myIssueView['display_properties']['priority'] ?? false; + issues.displayProperties.estimate = + myIssueView['display_properties']['estimate'] ?? false; + issues.displayProperties.startDate = + myIssueView['display_properties']['start_date'] ?? false; + issues.displayProperties.createdOn = + myIssueView['display_properties']['created_on'] ?? false; + issues.displayProperties.updatedOn = + myIssueView['display_properties']['updated_on'] ?? false; + } else { + issues.displayProperties = DisplayProperties.initialize(); + } // log("My Issues view=>${myIssueView.toString()}"); myIssuesViewState = StateEnum.success; diff --git a/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/create_issue.dart b/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/create_issue.dart index 54cb634..5d3b944 100644 --- a/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/create_issue.dart +++ b/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/create_issue.dart @@ -411,7 +411,7 @@ class _CreateIssueState extends ConsumerState { webviewController, title: 'Description', url: - '${dotenv.env['EDITOR_URL']!}m/${ref.read(ProviderList.workspaceProvider).selectedWorkspace!.workspaceSlug}/editor?editable=true', + '${dotenv.env['EDITOR_URL']!}/${ref.read(ProviderList.workspaceProvider).selectedWorkspace!.workspaceSlug}/editor?editable=true', ))); }, child: Container( @@ -516,7 +516,7 @@ class _CreateIssueState extends ConsumerState { initialUrlRequest: URLRequest( url: Uri.parse( - '${dotenv.env['EDITOR_URL']!}m/${ref.read(ProviderList.workspaceProvider).selectedWorkspace!.workspaceSlug}/editor?editable=false'))), + '${dotenv.env['EDITOR_URL']!}/${ref.read(ProviderList.workspaceProvider).selectedWorkspace!.workspaceSlug}/editor?editable=false'))), descriptionLoading ? Container( alignment: @@ -555,7 +555,7 @@ class _CreateIssueState extends ConsumerState { controller: webviewController, fromCreateIssue: true, title: 'Description', - url: '${dotenv.env['EDITOR_URL']!}m/${ref.read(ProviderList.workspaceProvider).selectedWorkspace!.workspaceSlug}/editor?editable=true', + url: '${dotenv.env['EDITOR_URL']!}/${ref.read(ProviderList.workspaceProvider).selectedWorkspace!.workspaceSlug}/editor?editable=true', ))); }, child: Container( diff --git a/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/issue_detail.dart b/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/issue_detail.dart index 42e5aeb..6873d5d 100644 --- a/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/issue_detail.dart +++ b/lib/screens/MainScreens/Projects/ProjectDetail/IssuesTab/issue_detail.dart @@ -113,7 +113,7 @@ class _IssueDetailState extends ConsumerState { return Scaffold( body: EDITOR( url: - '${dotenv.env['EDITOR_URL']}m/$workspaceSlug/projects/$projID/issues/${widget.issueId}', + '${dotenv.env['EDITOR_URL']}/$workspaceSlug/projects/$projID/issues/${widget.issueId}', title: widget.appBarTitle, ), ); diff --git a/lib/utils/editor.dart b/lib/utils/editor.dart index 4b039dd..38ad0ce 100644 --- a/lib/utils/editor.dart +++ b/lib/utils/editor.dart @@ -99,9 +99,13 @@ class _EDITORState extends ConsumerState { onLoadStart: (controller, url) => setState(() { isLoading = true; }), - onLoadStop: (controller, url) => setState(() { - isLoading = false; - }), + onLoadStop: (controller, url) { + // This is to remove the default crisp chatbot from the editor + // as it is not needed in the editor + controller.evaluateJavascript( + source: '\$crisp.push(["safe", true])'); + setState(() => isLoading = false); + }, onConsoleMessage: (controller, msg) async { log(msg.message); if (msg.message.startsWith("submitted")) {