diff --git a/package.json b/package.json index bddf93e..64e5917 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ }, "dependencies": { "@mui/icons-material": "^5.2.0", + "@react-navigation/native": "^6.0.6", "i18next": "^21.5.2", "i18next-browser-languagedetector": "^6.1.2", "node": "^16.10.0", @@ -40,6 +41,7 @@ "react-hook-form": "^7.20.2", "react-i18next": "^11.14.2", "react-markdown": "^7.1.0", + "react-navigation": "^4.4.4", "react-tabs": "^3.2.2" } } diff --git a/src/view/App.tsx b/src/view/App.tsx index 8ad99f4..abb350d 100644 --- a/src/view/App.tsx +++ b/src/view/App.tsx @@ -1,9 +1,10 @@ import * as React from "react"; import { Notice } from "obsidian"; -import { getStats, scoreTask, makeCronReq, costReward, addTask, deleteTask } from "./habiticaAPI" +import { getStats, scoreTask, makeCronReq, costReward, addTask, deleteTask, updateTask } from "./habiticaAPI" import Statsview from "./Components/Statsview" import Taskview from "./Components/Taskview" import "../i18n" +import { exit } from "process"; class App extends React.Component { private _username = ""; @@ -40,7 +41,6 @@ class App extends React.Component { todos: [], dailys: [], habits: [], - input_task: "", } this.handleChangeTodos = this.handleChangeTodos.bind(this); this.handleChangeDailys = this.handleChangeDailys.bind(this); @@ -167,9 +167,22 @@ class App extends React.Component { } } - async sendEditTask(id: string, type: string) { - console.log(id, type) - return (
Loading....
) + async sendUpdateTask(id: string, type: string,message: string, title: string, notes: string) { + try { + let response = await updateTask(this.username, this.credentials, id, type, title, notes); + let result = await response.json(); + if (result.success === true) { + new Notice(message); + this.reloadData(); + } else { + new Notice("Resyncing, please try again"); + this.reloadData(); + } + } catch (e) { + console.log(e); + new Notice("API Error: Please check credentials") + } + // console.log(id, type,title,notes) } handleChangeTodos(event: any) { @@ -205,9 +218,11 @@ class App extends React.Component { this.state.tasks.dailys.forEach((element: any) => { if (element.id == event.target.id) { if (element.id == event.target.id) { - if ( event.target.innerText == 'create' ) { - this.sendEditTask(event.target.id, "daily") - } else if (event.target.innerText == 'clear') { + if ( event.target.attributes.title.value == 'submit' ) { + const task_title = event.target.attributes['data-title'].value ? event.target.attributes['data-title'].value:element.text + const task_notes = event.target.attributes['data-notes'].value ? event.target.attributes['data-notes'].value:element.notes + this.sendUpdateTask(event.target.id,'daily',"Update!",task_title,task_notes) + } else if (event.target.attributes.title.value == 'delete') { this.sendDeleteTask(event.target.id, "Deleted!") } else if ( !element.completed) { this.sendScore(event.target.id, "up", "Checked!") @@ -259,7 +274,7 @@ class App extends React.Component { if (event.target.innerText == 'clear') { this.sendDeleteTask(event.target.id, "Deleted!") } else if (event.target.innerText == 'create') { - this.sendEditTask(event.target.id, "Edit!") + this.sendUpdateTask(event.target.id,'reward',"Edit!","1","1") } else { this.sendReward(target_id, "down", "Cost!") } diff --git a/src/view/Components/Taskview/Dailiesview/DailyItem.tsx b/src/view/Components/Taskview/Dailiesview/DailyItem.tsx index f15b068..c9697d3 100644 --- a/src/view/Components/Taskview/Dailiesview/DailyItem.tsx +++ b/src/view/Components/Taskview/Dailiesview/DailyItem.tsx @@ -2,24 +2,36 @@ import Emoji from "react-emoji-render"; import * as React from "react"; import ReactMarkdown from "react-markdown"; - function DailyItem(props: any) { - return ( + const [state, setState] = React.useState('view') + const [title, setTitle] = React.useState('') + const [notes, setNotes] = React.useState('') + if (state == 'view') { + return (

- -
- ) + ) + } else { + return ( +
+ setTitle(event.target.value)} defaultValue={props.daily_text}> + setNotes(event.target.value)} defaultValue={props.daily_notes}> + + +
+ ) + } } export default DailyItem \ No newline at end of file diff --git a/src/view/Components/Taskview/Dailiesview/EditDailyItem.tsx b/src/view/Components/Taskview/Dailiesview/EditDailyItem.tsx deleted file mode 100644 index e1faee7..0000000 --- a/src/view/Components/Taskview/Dailiesview/EditDailyItem.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import Emoji from "react-emoji-render"; -import * as React from "react"; -import ReactMarkdown from "react-markdown"; - - -function EditDailyItem(props: any) { - return ( -
- -
-

- -
- - - -
- ) -} - -export default EditDailyItem \ No newline at end of file diff --git a/src/view/Components/Taskview/Dailiesview/index.tsx b/src/view/Components/Taskview/Dailiesview/index.tsx index ffb8bea..6bef3a1 100644 --- a/src/view/Components/Taskview/Dailiesview/index.tsx +++ b/src/view/Components/Taskview/Dailiesview/index.tsx @@ -1,30 +1,30 @@ import * as React from "react"; import DailyItem from "./DailyItem" -import EditDailyItem from "./EditDailyItem" import { Tab, Tabs, TabList, TabPanel } from "react-tabs"; import { Trans } from 'react-i18next'; export default function Index(props: any) { const [title, setTitle] = React.useState('') + if (props.dailys == undefined) { return
setTitle(event.target.value)} /> No Dailies Present -
+ } else { const incompleteDailies = props.dailys.map((daily: any) => { if (!daily.completed) return ( - + ) }) const completedDailies = props.dailys.map((daily: any) => { if (daily.completed) return }) - + const display =
@@ -32,9 +32,12 @@ export default function Index(props: any) { Completed - setTitle(event.target.value)} /> - -
    {incompleteDailies}
+ setTitle(event.target.value)} value={title} /> + +
+
    {incompleteDailies}
+
+
    {completedDailies}
diff --git a/src/view/habiticaAPI.ts b/src/view/habiticaAPI.ts index c5da108..d69440a 100644 --- a/src/view/habiticaAPI.ts +++ b/src/view/habiticaAPI.ts @@ -83,4 +83,19 @@ export async function deleteTask(username: string, credentials: string, id: stri } }) return(response) +} + +export async function updateTask(username: string, credentials: string, id: string, type: string, title: string, notes: string) { + const url = "https://habitica.com/api/v4/tasks/".concat(id) + const response = fetch(url, { + method: 'PUT', + headers: { + "Content-Type": "application/json", + "x-client": "278e719e-5f9c-43b1-9dba-8b73343dc062-HabiticaSync", + "x-api-user": username, + "x-api-key": credentials, + }, + body: JSON.stringify({id: id,type: type, text: title,notes: notes}) + }) + return(response) } \ No newline at end of file diff --git a/styles.css b/styles.css index 91e1f8d..54626e0 100644 --- a/styles.css +++ b/styles.css @@ -212,7 +212,12 @@ ul { display: none; left: 0px; height: 88%; + /* overflow: scroll; */ +} + +.task-panel { overflow: scroll; + height: 100%; } .react-tabs__tab-panel--selected {