From a60eade0aeba466fa576426207dcf5bddf2c329e Mon Sep 17 00:00:00 2001 From: Leoh Date: Fri, 15 Oct 2021 09:41:43 +0530 Subject: [PATCH 1/6] Checkboxes sync enabled --- view/App.tsx | 64 +++++++++++++++++++++++++++------------------ view/TodoItem.tsx | 6 ++--- view/habiticaAPI.ts | 30 ++++++++++----------- 3 files changed, 56 insertions(+), 44 deletions(-) diff --git a/view/App.tsx b/view/App.tsx index cc7c1b4..ed6fb2c 100644 --- a/view/App.tsx +++ b/view/App.tsx @@ -1,5 +1,6 @@ +import { Tasks } from "obsidian"; import * as React from "react"; -import { getTasks, getStats } from "./habiticaAPI" +import { getStats, scoreTask } from "./habiticaAPI" import TodoItem from "./TodoItem" let username = "" @@ -21,32 +22,17 @@ class App extends React.Component { lvl: 0, } }, - tasks: [] //gave an error if the the tasks thing was string so better keep it an array for .map to work :) + tasks: [] } + this.handleChange = this.handleChange.bind(this) } - componentDidMount() { - // getTasks(username, credentials) - // .then(res => res.json()) - // .then( - // result => { - // this.setState({ - // isLoaded: true, - // tasks: result.data - // }) - // }, - // (error) => { - // this.setState({ - // isLoaded: true, - // error - // }) - // } - // ) - + reloadData() { getStats(username, credentials) .then(res => res.json()) .then( result => { - console.log(result) //yup this prints out correctly! since the promise is handled by .then + console.log(result) + console.log("data reloaded") this.setState({ isLoaded: true, user_data: result, @@ -60,8 +46,38 @@ class App extends React.Component { }) } ) - } + componentDidMount() { + this.reloadData() + } + handleChange(event: any){ + this.state.tasks.forEach((element: any) => { + if(element.id == event.target.id){ + if(!element.completed){ + scoreTask(username, credentials, event.target.id, "up") + .then(res => res.json()) + .then( + result => { + console.log("Checked!") + console.log(result) + this.reloadData() + } + ) + } else { + scoreTask(username, credentials, event.target.id, "down") + .then(res => res.json()) + .then( + result => { + console.log("unchecked!") + console.log(result) + this.reloadData() + } + ) + } + } + }) + } + render(){ const { error, isLoaded, tasks } = this.state; const user_data = this.state.user_data @@ -71,9 +87,7 @@ class App extends React.Component { return
Loading...
; } else { const listItems = tasks.map((tasks: any) => -
- -
+ ); return (

{user_data.profile.name}

{"\n"} diff --git a/view/TodoItem.tsx b/view/TodoItem.tsx index 6566dcc..bf681c7 100644 --- a/view/TodoItem.tsx +++ b/view/TodoItem.tsx @@ -1,9 +1,9 @@ import * as React from "react"; -function TodoItem(props: any) { +function TodoItem(props: any) { return ( -
- +
+

{props.task.text}

) diff --git a/view/habiticaAPI.ts b/view/habiticaAPI.ts index e0ab591..70d7667 100644 --- a/view/habiticaAPI.ts +++ b/view/habiticaAPI.ts @@ -1,20 +1,5 @@ // import fetch from "node-fetch"; - -export async function getTasks(username: string, credentials: string){ - const url = "https://habitica.com/api/v3/tasks/user?type=todos" - const response = fetch(url, { - method: 'GET', - headers: { - "Content-Type": "application/json", - "x-client": username.concat("-testAPI"), - "x-api-user": username, - "x-api-key": credentials, - }, - }) - return (response) -} - export async function getStats(username: string, credentials: string){ const url = "https://habitica.com/export/userdata.json" const response = fetch(url, { @@ -26,6 +11,19 @@ export async function getStats(username: string, credentials: string){ "x-api-key": credentials, }, }) - console.log("stats") //can't print stats from here since the response is still an unresolved promise return (response) +} + +export async function scoreTask(username: string, credentials: string, taskID: string, direction: string) { + const url = "https://habitica.com/api/v3/tasks/".concat(taskID).concat("/score/").concat(direction) + const response = fetch(url, { + method: 'POST', + headers: { + "Content-Type": "application/json", + "x-client": username.concat("-testAPI"), + "x-api-user": username, + "x-api-key": credentials, + } + }) + return(response) } \ No newline at end of file From 98a15c0c9e4b6edf521ccd2ca82c8319fc6e3ef3 Mon Sep 17 00:00:00 2001 From: Leoh Date: Fri, 15 Oct 2021 10:30:25 +0530 Subject: [PATCH 2/6] Notices for events and sync errors handled --- ReactView.tsx | 2 +- main.ts | 5 ++++- view.tsx | 2 +- view/App.tsx | 33 +++++++++++++++++++++++++++------ 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/ReactView.tsx b/ReactView.tsx index 9f1a877..e1368a7 100644 --- a/ReactView.tsx +++ b/ReactView.tsx @@ -3,6 +3,6 @@ import App from "./view/App"; export default function ReactView(props: any){ return( - + ) } \ No newline at end of file diff --git a/main.ts b/main.ts index 9d871c8..984a63b 100644 --- a/main.ts +++ b/main.ts @@ -1,4 +1,4 @@ -import { Plugin } from "obsidian"; +import { Notice, Plugin } from "obsidian"; import { ExampleSettingsTab } from "./settings"; import { ExampleView, VIEW_TYPE_EXAMPLE} from "./view" @@ -14,6 +14,9 @@ export default class ExamplePlugin extends Plugin { settings: ExamplePluginSettings; view: ExampleView; + displayNotice(message: string){ + new Notice(message) + } async onload() { await this.loadSettings(); this.addSettingTab(new ExampleSettingsTab(this.app, this)); diff --git a/view.tsx b/view.tsx index 5f69b9b..7bd7c67 100644 --- a/view.tsx +++ b/view.tsx @@ -24,7 +24,7 @@ export class ExampleView extends ItemView { async onOpen() { ReactDOM.render( - , + , this.containerEl.children[1] ) } diff --git a/view/App.tsx b/view/App.tsx index ed6fb2c..e3fec35 100644 --- a/view/App.tsx +++ b/view/App.tsx @@ -26,6 +26,9 @@ class App extends React.Component { } this.handleChange = this.handleChange.bind(this) } + sendNotice(message: string){ + this.props.plugin.displayNotice(message) + } reloadData() { getStats(username, credentials) .then(res => res.json()) @@ -58,9 +61,18 @@ class App extends React.Component { .then(res => res.json()) .then( result => { - console.log("Checked!") - console.log(result) - this.reloadData() + if(result.success) { + this.sendNotice("Checked!") + console.log(result) + this.reloadData() + } else { + this.sendNotice("Resyncing, please try again") + this.reloadData() + } + }, + (error) => { + this.sendNotice("API Error: Please Check crendentials and try again") + console.log(error) } ) } else { @@ -68,9 +80,18 @@ class App extends React.Component { .then(res => res.json()) .then( result => { - console.log("unchecked!") - console.log(result) - this.reloadData() + if(result.success){ + this.sendNotice("unchecked!") + console.log(result) + this.reloadData() + } else { + this.sendNotice("Resyncing, please try again") + this.reloadData() + } + }, + (error) => { + this.sendNotice("API Error: Please Check crendentials and try again") + console.log(error) } ) } From d4c2d25586748ef37baa26100b0eeec5f6b3c2a0 Mon Sep 17 00:00:00 2001 From: Leoh Date: Fri, 15 Oct 2021 17:33:32 +0530 Subject: [PATCH 3/6] Components Extracted --- view/App.tsx | 31 +++++++++------------ view/Components/Statsview/index.css | 0 view/Components/Statsview/index.tsx | 11 ++++++++ view/{ => Components/Taskview}/TodoItem.tsx | 4 +-- view/Components/Taskview/index.tsx | 9 ++++++ 5 files changed, 35 insertions(+), 20 deletions(-) create mode 100644 view/Components/Statsview/index.css create mode 100644 view/Components/Statsview/index.tsx rename view/{ => Components/Taskview}/TodoItem.tsx (52%) create mode 100644 view/Components/Taskview/index.tsx diff --git a/view/App.tsx b/view/App.tsx index e3fec35..ab2d596 100644 --- a/view/App.tsx +++ b/view/App.tsx @@ -1,7 +1,7 @@ -import { Tasks } from "obsidian"; import * as React from "react"; import { getStats, scoreTask } from "./habiticaAPI" -import TodoItem from "./TodoItem" +import Statsview from "./Components/Statsview" +import Taskview from "./Components/Taskview" let username = "" let credentials = "" @@ -22,7 +22,7 @@ class App extends React.Component { lvl: 0, } }, - tasks: [] + todos: [] } this.handleChange = this.handleChange.bind(this) } @@ -39,7 +39,7 @@ class App extends React.Component { this.setState({ isLoaded: true, user_data: result, - tasks: result.tasks.todos + todos: result.tasks.todos }) }, (error) => { @@ -54,7 +54,7 @@ class App extends React.Component { this.reloadData() } handleChange(event: any){ - this.state.tasks.forEach((element: any) => { + this.state.todos.forEach((element: any) => { if(element.id == event.target.id){ if(!element.completed){ scoreTask(username, credentials, event.target.id, "up") @@ -100,20 +100,15 @@ class App extends React.Component { } render(){ - const { error, isLoaded, tasks } = this.state; - const user_data = this.state.user_data - if (error) { - return
Error: {error.message}
; - } else if (!isLoaded) { - return
Loading...
; - } else { - const listItems = tasks.map((tasks: any) => - - ); + // if(this.state.error) + // return(
Loading....
) + // else if(this.state.isLoaded) + if (!this.state.isLoaded) + return
Loading....
+ else { return (
-

{user_data.profile.name}

{"\n"} -
HP: {user_data.stats.hp}
XP: {user_data.stats.lvl}
{"\n"} -
    {listItems}
+ +
); } diff --git a/view/Components/Statsview/index.css b/view/Components/Statsview/index.css new file mode 100644 index 0000000..e69de29 diff --git a/view/Components/Statsview/index.tsx b/view/Components/Statsview/index.tsx new file mode 100644 index 0000000..9ea4192 --- /dev/null +++ b/view/Components/Statsview/index.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; + +export default function Index(props: any) { + return( +
+
{props.user_data.profile.name}
+
HP: {props.user_data.stats.hp}
+
LVL: {props.user_data.stats.lvl}
+
+ ); +} \ No newline at end of file diff --git a/view/TodoItem.tsx b/view/Components/Taskview/TodoItem.tsx similarity index 52% rename from view/TodoItem.tsx rename to view/Components/Taskview/TodoItem.tsx index bf681c7..4adc70f 100644 --- a/view/TodoItem.tsx +++ b/view/Components/Taskview/TodoItem.tsx @@ -3,8 +3,8 @@ function TodoItem(props: any) { return (
- -

{props.task.text}

+ +

{props.todo_text}

) } diff --git a/view/Components/Taskview/index.tsx b/view/Components/Taskview/index.tsx new file mode 100644 index 0000000..19dee83 --- /dev/null +++ b/view/Components/Taskview/index.tsx @@ -0,0 +1,9 @@ +import * as React from "react"; +import TodoItem from "./TodoItem" + +export default function Index(props: any){ + const listItems = props.todos.map((todo: any) => { + return + }) + return(
    {listItems}
); +} \ No newline at end of file From d47b032a8750d318885774e26a42d6e63ba9805c Mon Sep 17 00:00:00 2001 From: Leoh Date: Fri, 15 Oct 2021 17:38:57 +0530 Subject: [PATCH 4/6] Fixed error handling in API calls --- view/App.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/view/App.tsx b/view/App.tsx index ab2d596..5fcf46d 100644 --- a/view/App.tsx +++ b/view/App.tsx @@ -100,10 +100,9 @@ class App extends React.Component { } render(){ - // if(this.state.error) - // return(
Loading....
) - // else if(this.state.isLoaded) - if (!this.state.isLoaded) + if(this.state.error) + return(
Loading....
) + else if(!this.state.isLoaded) return
Loading....
else { return (
From 83e98e69843a7f1ed4eed307768efa95ef16de89 Mon Sep 17 00:00:00 2001 From: Leoh Date: Fri, 15 Oct 2021 17:42:39 +0530 Subject: [PATCH 5/6] aesthetics updated --- view/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/App.tsx b/view/App.tsx index 5fcf46d..bf3da14 100644 --- a/view/App.tsx +++ b/view/App.tsx @@ -81,7 +81,7 @@ class App extends React.Component { .then( result => { if(result.success){ - this.sendNotice("unchecked!") + this.sendNotice("Un-checked!") console.log(result) this.reloadData() } else { From 5db9e24ccf5b099b22871e59a87e94cc3b0b05ac Mon Sep 17 00:00:00 2001 From: Leoh Date: Sat, 16 Oct 2021 14:18:08 +0530 Subject: [PATCH 6/6] build files added --- .gitignore | 7 ------- ReactView.js | 5 +++++ settings.js | 23 +++++++++++++++++++++++ view.js | 28 ++++++++++++++++++++++++++++ view/App.js | 16 ++++++++++++++++ 5 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 ReactView.js create mode 100644 settings.js create mode 100644 view.js create mode 100644 view/App.js diff --git a/.gitignore b/.gitignore index d1ae52b..3d57753 100644 --- a/.gitignore +++ b/.gitignore @@ -15,10 +15,3 @@ data.json #vscode .vscode - -#buildfiles -settings.js -view/App.js -ReactView.js -settings.js -view.js \ No newline at end of file diff --git a/ReactView.js b/ReactView.js new file mode 100644 index 0000000..51ad9aa --- /dev/null +++ b/ReactView.js @@ -0,0 +1,5 @@ +import * as React from "react"; +import App from "./view/App"; +export const ReactView = () => { + return React.createElement(App, null); +}; diff --git a/settings.js b/settings.js new file mode 100644 index 0000000..afdc4db --- /dev/null +++ b/settings.js @@ -0,0 +1,23 @@ +import { __awaiter } from "tslib"; +import { PluginSettingTab, Setting } from "obsidian"; +export class ExampleSettingsTab extends PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + new Setting(containerEl) + .setName("Date format") + .setDesc("Default date format") + .addText((text) => text + .setPlaceholder("MMMM dd, yyyy") + .setValue(this.plugin.settings.dateFormat) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.dateFormat = value; + yield this.plugin.saveSettings(); + }))); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFPLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUxRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZ0JBQWdCO0lBR3BELFlBQVksR0FBUSxFQUFFLE1BQXFCO1FBQ3ZDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDeEIsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQzNCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVwQixJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDbkIsT0FBTyxDQUFDLGFBQWEsQ0FBQzthQUN0QixPQUFPLENBQUMscUJBQXFCLENBQUM7YUFDOUIsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FFZCxJQUFJO2FBQ0MsY0FBYyxDQUFDLGVBQWUsQ0FBQzthQUMvQixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQ3pDLFFBQVEsQ0FBQyxDQUFPLEtBQUssRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQSxDQUFDLENBQ1QsQ0FBQztJQUNWLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGFtcGxlUGx1Z2luIGZyb20gXCJtYWluXCI7XHJcbmltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEV4YW1wbGVTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG4gICAgcGx1Z2luOiBFeGFtcGxlUGx1Z2luO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IEV4YW1wbGVQbHVnaW4pIHtcclxuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbilcclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpblxyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XHJcbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcclxuICAgICAgICBcclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJEYXRlIGZvcm1hdFwiKVxyXG4gICAgICAgICAgICAuc2V0RGVzYyhcIkRlZmF1bHQgZGF0ZSBmb3JtYXRcIilcclxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRleHRcclxuICAgICAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJNTU1NIGRkLCB5eXl5XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRhdGVGb3JtYXQpXHJcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcbn0iXX0= \ No newline at end of file diff --git a/view.js b/view.js new file mode 100644 index 0000000..f093469 --- /dev/null +++ b/view.js @@ -0,0 +1,28 @@ +import { __awaiter } from "tslib"; +import { ItemView } from "obsidian"; +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import { ReactView } from "./ReactView"; +export const VIEW_TYPE_EXAMPLE = "example-view"; +export class ExampleView extends ItemView { + constructor(leaf) { + super(leaf); + } + getViewType() { + return VIEW_TYPE_EXAMPLE; + } + getDisplayText() { + return "Example View"; + } + onOpen() { + return __awaiter(this, void 0, void 0, function* () { + ReactDOM.render(React.createElement(ReactView), this.containerEl.children[1]); + }); + } + onClose() { + return __awaiter(this, void 0, void 0, function* () { + ReactDOM.unmountComponentAtNode(this.containerEl.children[1]); + }); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sVUFBVSxDQUFDO0FBQ2xELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHeEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFBO0FBRS9DLE1BQU0sT0FBTyxXQUFZLFNBQVEsUUFBUTtJQUNyQyxZQUFZLElBQW1CO1FBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNmLENBQUM7SUFFRCxXQUFXO1FBQ1AsT0FBTyxpQkFBaUIsQ0FBQTtJQUM1QixDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sY0FBYyxDQUFBO0lBQ3pCLENBQUM7SUFFSyxNQUFNOztZQUNSLFFBQVEsQ0FBQyxNQUFNLENBQ1gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQy9CLENBQUE7UUFDTCxDQUFDO0tBQUE7SUFFSyxPQUFPOztZQUNULFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7S0FBQTtDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSXRlbVZpZXcsV29ya3NwYWNlTGVhZiB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xyXG5pbXBvcnQgeyBSZWFjdFZpZXcgfSBmcm9tIFwiLi9SZWFjdFZpZXdcIjtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgVklFV19UWVBFX0VYQU1QTEUgPSBcImV4YW1wbGUtdmlld1wiXHJcblxyXG5leHBvcnQgY2xhc3MgRXhhbXBsZVZpZXcgZXh0ZW5kcyBJdGVtVmlldyB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZWFmOiBXb3Jrc3BhY2VMZWFmKSB7XHJcbiAgICAgICAgc3VwZXIobGVhZilcclxuICAgIH1cclxuXHJcbiAgICBnZXRWaWV3VHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gVklFV19UWVBFX0VYQU1QTEVcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gXCJFeGFtcGxlIFZpZXdcIlxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uT3BlbigpIHtcclxuICAgICAgICBSZWFjdERPTS5yZW5kZXIoXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RWaWV3KSxcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbC5jaGlsZHJlblsxXVxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkNsb3NlKCl7XHJcbiAgICAgICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLmNvbnRhaW5lckVsLmNoaWxkcmVuWzFdKTtcclxuICAgIH1cclxufSJdfQ== \ No newline at end of file diff --git a/view/App.js b/view/App.js new file mode 100644 index 0000000..b56a444 --- /dev/null +++ b/view/App.js @@ -0,0 +1,16 @@ +import * as React from "react"; +import { tasks } from "./habiticaAPI"; +const username = "ebbdcbab-e0dc-404b-aa50-9824f0678adf"; +const credentials = "bed67d72-63cc-479c-88d3-8845569b04f8"; +class App extends React.Component { + constructor(props) { + super(props); + const data = tasks(username, credentials); + console.log(data); + } + render() { + return (React.createElement("h2", null, "Hello")); + } +} +export default App; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQXBwLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXJDLE1BQU0sUUFBUSxHQUFHLHNDQUFzQyxDQUFBO0FBQ3ZELE1BQU0sV0FBVyxHQUFHLHNDQUFzQyxDQUFBO0FBRTFELE1BQU0sR0FBSSxTQUFRLEtBQUssQ0FBQyxTQUFTO0lBQzdCLFlBQVksS0FBVTtRQUNsQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDWixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELE1BQU07UUFBRyxPQUFNLENBQ1gsd0NBQWMsQ0FDakIsQ0FBQTtJQUNELENBQUM7Q0FDSjtBQUNELGVBQWUsR0FBRyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IHRhc2tzIH0gZnJvbSBcIi4vaGFiaXRpY2FBUElcIlxyXG5cclxuY29uc3QgdXNlcm5hbWUgPSBcImViYmRjYmFiLWUwZGMtNDA0Yi1hYTUwLTk4MjRmMDY3OGFkZlwiXHJcbmNvbnN0IGNyZWRlbnRpYWxzID0gXCJiZWQ2N2Q3Mi02M2NjLTQ3OWMtODhkMy04ODQ1NTY5YjA0ZjhcIlxyXG5cclxuY2xhc3MgQXBwIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBjb25zdCBkYXRhID0gdGFza3ModXNlcm5hbWUsIGNyZWRlbnRpYWxzKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKCl7cmV0dXJuKFxyXG4gICAgICAgIDxoMj5IZWxsbzwvaDI+XHJcbiAgICApXHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgQXBwIl19 \ No newline at end of file