const contract = "dev-1692734722309-12667869668025"; const methods = [ "create_new_project", "edit_name", "change_owner", "delete_project", "get_owners_projects", "get_members_projects", "get_project", "get_statuses", "add_status", "reorder_statuses", "remove_status", "add_member", "remove_member", "create_task", "get_task", "change_task_name", "edit_task_description", "assign_task", "remove_assignee", "move_task", "delete_task_by_id", "comment_on_task", "delete_comment_by_id", "edit_comment", "create_label", "get_label", "get_labels", "delete_label", "change_label_text", "change_label_color", "add_label_to_task", "remove_label_from_task", "add_checklist_element", "edit_checklist_element", "mark_checkmark", "delete_checkmark", "upload_file", "remove_file", "set_priority", "reset_priority" ]; const accountId = context.accountId; State.init({ boards: [], selectedProjectId: undefined, bootStrapping: true, loggedIn: false, }); const createBoard = (projectName) => { return Near.fakCall(contract, "create_new_project", { name: projectName, owner: accountId, members: [accountId], statuses: ["TODO", "WIP", "DONE"] }).then( (res) => { console.log("create_new_project", res); getBoards(); } ); }; const onBoardSelected = (account) => { console.log("select board", account); State.update({ selectedProjectId: account }); }; const bootStrapApp = () => { Near.hasValidFak(contract).then((result) => { console.log("hasValidFak", result); if (result) { State.update({ bootStrapping: false, loggedIn: true }); getBoards(); } else { State.update({ bootStrapping: false, loggedIn: false }); } }); }; const getBoards = () => { Near.asyncView(contract, "get_members_projects", { member_id: context.accountId}).then( (boards) => { console.log("boards", boards); State.update({ boards, selectedProjectId: boards.length > 0 ? boards[0][0] : undefined, bootStrapping: false, }); } ); }; if (state.bootStrapping) { bootStrapApp(); return <Widget src="calimero.testnet/widget/Calimero.TaskChain.Loading" />; } if (!state.loggedIn) { return ( <Widget src="calimero.testnet/widget/Calimero.TaskChain.JoinApp" props={{ appName: "TaskChain", contractName: contract, methodNames: methods, }} /> ); } return ( <div style={{ display: "flex", flexDirection: "row", height: "80vh", width: "100%", }} > <Widget src="calimero.testnet/widget/Calimero.TaskChain.SideMenu" props={{ boards: state.boards, selectedProjectId: state.selectedProjectId, createBoard, onBoardSelected, }} /> <div class="container"> {state.selectedProjectId && ( <Widget src="calimero.testnet/widget/Calimero.TaskChain.Board" props={{ projectId: state.selectedProjectId, }} /> )} </div> </div> );