Skip to content

Commit

Permalink
Fe reset workspace button (#717)
Browse files Browse the repository at this point in the history
* reset workspace button

* pending field

* pending

* bug fix

* bug fix

* conflicts resolved
  • Loading branch information
Zulalm committed Dec 25, 2023
1 parent 8c17ea8 commit c6e170d
Show file tree
Hide file tree
Showing 10 changed files with 221 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@ class Workspace {
List<Node> references;
int fromNodeId;
int requestId;
bool pending;
bool pendingReviewer;
bool pendingContributor;

List<Comment> comments;

Workspace({
required this.workspaceId,
required this.workspaceTitle,
Expand All @@ -33,7 +38,11 @@ class Workspace {
required this.references,
required this.fromNodeId,
required this.requestId,
required this.pending,
required this.pendingContributor,
required this.pendingReviewer,
required this.comments,

});

factory Workspace.fromJson(Map<String, dynamic> jsonString) {
Expand Down Expand Up @@ -75,7 +84,13 @@ List<Comment> comments = commentsList.map((e) => Comment.fromJson(e)).toList();
references: references,
requestId: jsonString["request_id"] == "" ? -1 : jsonString["request_id"],
fromNodeId: jsonString["from_node_id"] == "" ? -1 : jsonString["from_node_id"],

pending: jsonString["pending_reviewer"] || jsonString["pending_collab"],
pendingReviewer: jsonString["pending_reviewer"],
pendingContributor: jsonString["pending_collab"],

comments: comments,

);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,31 @@ class WorkspaceProvider with ChangeNotifier {
}
}

Future<void> setProof(int entryId, int workspaceId, String token) async {

Future<void> resetWorkspace(int workspaceId, String token) async {
Uri url = Uri.parse("${Constants.apiUrl}/reset_workspace_state/");

var request = http.MultipartRequest('POST', url);
request.headers.addAll({
"Authorization": "Token $token",
"content-type": "application/json",
});
request.fields.addAll({
'workspace_id': "$workspaceId",
});

http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
//print(await response.stream.bytesToString());
notifyListeners();
} else if (response.statusCode == 400) {
throw WorkspaceDoesNotExist();
} else {
throw Exception("Something has happened");
}
}

Future<void> setProof(int entryId, int workspaceId, String token) async {
Uri url = Uri.parse("${Constants.apiUrl}/set_workspace_proof/");
var request = http.MultipartRequest('POST', url);
request.headers.addAll({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,17 @@ class MobileWorkspacePage extends StatefulWidget {
final Function addReview;
final Function updateReviewRequest;
final Function updateCollaborationRequest;

final Function resetWorkspace;

final Function setProof;
final Function setDisproof;
final Function setTheorem;
final Function removeDisproof;
final Function removeTheorem;
final Function removeProof;


const MobileWorkspacePage({
super.key,
required this.workspace,
Expand All @@ -61,12 +65,15 @@ class MobileWorkspacePage extends StatefulWidget {
required this.addReview,
required this.updateReviewRequest,
required this.updateCollaborationRequest,
required this.resetWorkspace,

required this.removeDisproof,
required this.removeProof,
required this.removeTheorem,
required this.setDisproof,
required this.setProof,
required this.setTheorem,

});

@override
Expand Down Expand Up @@ -376,7 +383,8 @@ class _MobileWorkspacesPageState extends State<MobileWorkspacePage> {
: (widget.workspaces != null && widget.workspace != null)
? MobileWorkspaceContent(
workspace: widget.workspace!,
pending: (workspaceIndex >= widget.workspaces!.workspaces.length),
pending: widget.workspace!.pending,

createNewEntry: widget.createNewEntry,
editEntry: widget.editEntry,
deleteEntry: widget.deleteEntry,
Expand All @@ -391,6 +399,8 @@ class _MobileWorkspacesPageState extends State<MobileWorkspacePage> {
sendWorkspaceToReview: widget.sendWorkspaceToReview,
addReview: widget.addReview,

resetWorkspace: widget.resetWorkspace,

setProof: widget.setProof,
setDisproof: widget.setDisproof,
setTheorem: widget.setTheorem,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:collaborative_science_platform/models/workspaces_page/workspace.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
Expand All @@ -6,15 +7,18 @@ import 'package:collaborative_science_platform/models/user.dart';
import 'package:collaborative_science_platform/utils/colors.dart';
import 'package:collaborative_science_platform/screens/profile_page/profile_page.dart';


class ContributorCard extends StatelessWidget {
final User contributor;
final bool pending;
final bool workspacePending;
final Function updateRequest;

const ContributorCard({
super.key,
required this.contributor,
required this.pending,
required this.workspacePending,
required this.updateRequest,
});

@override
Expand Down Expand Up @@ -69,17 +73,17 @@ class ContributorCard extends StatelessWidget {
),
],
),
if (pending) IconButton(
icon: const Icon(
CupertinoIcons.clear_circled,
color: AppColors.warningColor,
if (pending && !workspacePending)
IconButton(
icon: const Icon(
CupertinoIcons.clear_circled,
color: AppColors.warningColor,
),
onPressed: () async {
// function to delete collaboration request
await updateRequest(contributor.requestId, RequestStatus.rejected);
},
),
onPressed: () {
// function to delete collaboration request
//TODO - requests id's are absent for now.
//updateRequest();
},
),
],
),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ class MobileWorkspaceContent extends StatefulWidget {
final Function removeSemanticTag;
final Function sendWorkspaceToReview;
final Function addReview;
final Function resetWorkspace;

final Function setProof;
final Function setDisproof;
final Function setTheorem;
Expand Down Expand Up @@ -59,6 +61,9 @@ class MobileWorkspaceContent extends StatefulWidget {
required this.updateRequest,
required this.sendWorkspaceToReview,
required this.addReview,

required this.resetWorkspace,

required this.removeDisproof,
required this.removeProof,
required this.removeTheorem,
Expand All @@ -67,6 +72,7 @@ class MobileWorkspaceContent extends StatefulWidget {
required this.setTheorem,
required this.displayCommentSidebar,


});

@override
Expand Down Expand Up @@ -100,10 +106,12 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
return Center(
child: IconButton(
iconSize: 40.0,
onPressed: widget.workspace.status != WorkspaceStatus.workable ? () {} : onPressed,
onPressed: (widget.workspace.status != WorkspaceStatus.workable || widget.workspace.pending)
? () {}
: onPressed,
icon: Icon(
Icons.add,
color: widget.workspace.status != WorkspaceStatus.workable
color: (widget.workspace.status != WorkspaceStatus.workable || widget.workspace.pending)
? Colors.grey[200]
: Colors.grey[800],
),
Expand Down Expand Up @@ -143,8 +151,11 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
return SemanticTagCard(
finalized: widget.workspace.status != WorkspaceStatus.workable,

finalized:
widget.workspace.status != WorkspaceStatus.workable || widget.workspace.pending,
tag: widget.workspace.tags[index],

backgroundColor: const Color.fromARGB(255, 220, 235, 220),
onDelete: () async {
await widget.removeSemanticTag(widget.workspace.tags[index].tagId);
Expand All @@ -168,7 +179,8 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
itemBuilder: (context, index) {
return (index < length)
? MobileEntryCard(
finalized: widget.workspace.status != WorkspaceStatus.workable,
finalized: widget.workspace.status != WorkspaceStatus.workable ||
widget.workspace.pending,
entry: widget.workspace.entries[index],
onDelete: () async {
await widget.deleteEntry(widget.workspace.entries[index].entryId);
Expand All @@ -187,7 +199,8 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
onCreate: widget.createNewEntry,
backgroundColor: const Color.fromARGB(255, 220, 220, 240),
isMobile: true,
finalized: widget.workspace.status != WorkspaceStatus.workable,
finalized: widget.workspace.status != WorkspaceStatus.workable ||
widget.workspace.pending,
);
},
),
Expand All @@ -208,7 +221,8 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
onCreate: widget.createNewEntry,
backgroundColor: const Color.fromARGB(255, 220, 220, 240),
isMobile: true,
finalized: widget.workspace.status != WorkspaceStatus.workable,
finalized:
widget.workspace.status != WorkspaceStatus.workable || widget.workspace.pending,
),
],
);
Expand All @@ -235,11 +249,16 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
? ContributorCard(
contributor: widget.workspace.contributors[index],
pending: false,
workspacePending: widget.workspace.pending,
updateRequest: widget.updateRequest,
)
: (index < length + pendingLength)
? ContributorCard(
contributor: widget.workspace.pendingContributors[index - length],
pending: true,
workspacePending: widget.workspace.pending,
updateRequest: widget.updateRequest,

)
: addIcon(() {
showDialog(context: context, builder: (context) => alertDialog);
Expand Down Expand Up @@ -312,7 +331,8 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
style: TextStyles.title2,
),
),
if (widget.workspace.status == WorkspaceStatus.workable)
if (widget.workspace.status == WorkspaceStatus.workable &&
!widget.workspace.pending)
IconButton(
onPressed: () {
setState(() {
Expand All @@ -333,6 +353,7 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
obscureText: false,
height: 200),
),
if (!widget.workspace.pending)
SizedBox(
width: 50,
height: 50,
Expand All @@ -349,25 +370,26 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
)
],
),
if (widget.workspace.requestId == -1)
if (!widget.workspace.pending && widget.workspace.requestId == -1)
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5.0, vertical: 4.0),
child: AppButton(
isActive: widget.workspace.status == WorkspaceStatus.workable ||
widget.workspace.status == WorkspaceStatus.finalized,
height: 40,
isActive: widget.workspace.status == WorkspaceStatus.workable ||
widget.workspace.status == WorkspaceStatus.finalized ||
widget.workspace.status == WorkspaceStatus.rejected,
text: widget.pending
? "Accept Workspace"
: (widget.workspace.status == WorkspaceStatus.workable
: widget.workspace.status == WorkspaceStatus.workable
? "Finalize Workspace"
: (widget.workspace.status == WorkspaceStatus.finalized
: widget.workspace.status == WorkspaceStatus.finalized
? "Send to Review"
: "In Review")),
icon: widget.pending
? const Icon(Icons.approval)
: (widget.workspace.status == WorkspaceStatus.workable
? const Icon(Icons.lock)
: const Icon(Icons.send)),
: (widget.workspace.status == WorkspaceStatus.rejected
? "Reset Workspace"
: (widget.workspace.status == WorkspaceStatus.inReview
? "In Review"
: "Published")),

onTap: widget.pending
? () {
// accept or reject the review
Expand Down Expand Up @@ -396,13 +418,16 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
);
}
: () {
// send to review
showDialog(
context: context,
builder: (context) => AppAlertDialog(
text: widget.workspace.status == WorkspaceStatus.workable
? "Do you want to finalize the workspace?"
: "Do you want to send it to review?",

: (widget.workspace.status == WorkspaceStatus.finalized
? "Do you want to send it to review?"
: "Do you want to reset the workspace?"),

actions: [
Padding(
padding: const EdgeInsets.symmetric(vertical: 5),
Expand All @@ -413,10 +438,16 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
if (widget.workspace.status == WorkspaceStatus.workable) {
widget.finalizeWorkspace();
Navigator.of(context).pop();
} else {
} else if (widget.workspace.status ==
WorkspaceStatus.finalized) {
/* Send to review */
widget.sendWorkspaceToReview();
Navigator.of(context).pop();
} else if (widget.workspace.status ==
WorkspaceStatus.rejected) {
widget.resetWorkspace();
Navigator.of(context).pop();

}
},
),
Expand All @@ -437,7 +468,10 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
},
),
),
if (widget.workspace.requestId != -1)
if (!widget.workspace.pending &&
widget.workspace.requestId != -1 &&
widget.workspace.status == WorkspaceStatus.inReview)

/** adjust it to check if the user is reviewer of this workspace */
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5.0, vertical: 4.0),
Expand Down Expand Up @@ -535,11 +569,11 @@ class _MobileWorkspaceContentState extends State<MobileWorkspaceContent> {
padding: EdgeInsets.symmetric(horizontal: 12.0),
child: Divider(),
),
if (widget.workspace.requestId == -1)
if (widget.workspace.requestId == -1 || widget.workspace.pendingContributor)
const SubSectionTitle(title: "Contributors"),
if (widget.workspace.requestId == -1)
if (widget.workspace.requestId == -1 || widget.workspace.pendingContributor)
contributorList(),
if (widget.workspace.requestId == -1)
if (widget.workspace.requestId == -1 || widget.workspace.pendingContributor)
const Padding(
padding: EdgeInsets.symmetric(horizontal: 12.0),
child: Divider(),
Expand Down
Loading

0 comments on commit c6e170d

Please sign in to comment.