aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/views/nodes/TaskBox.scss30
-rw-r--r--src/client/views/nodes/TaskBox.tsx140
2 files changed, 68 insertions, 102 deletions
diff --git a/src/client/views/nodes/TaskBox.scss b/src/client/views/nodes/TaskBox.scss
index 6ef0c6454..a7f75acdb 100644
--- a/src/client/views/nodes/TaskBox.scss
+++ b/src/client/views/nodes/TaskBox.scss
@@ -40,7 +40,7 @@
resize: none;
line-height: 1.4;
resize: none;
- flex-grow: 1
+ flex-grow: 1;
}
.task-manager-checkboxes {
@@ -49,7 +49,8 @@
gap: 16px;
}
-.task-manager-allday, .task-manager-complete {
+.task-manager-allday,
+.task-manager-complete {
display: flex;
align-items: center;
gap: 6px;
@@ -71,11 +72,32 @@
gap: 4px;
}
-input[type="datetime-local"] {
+input[type='datetime-local'] {
width: 100%;
font-size: 0.9rem;
padding: 6px 8px;
border: 1px solid #ccc;
border-radius: 6px;
box-sizing: border-box;
-} \ No newline at end of file
+}
+
+.task-manager-checkboxes {
+ display: flex;
+ flex-wrap: wrap; /* allows wrapping on small screens */
+ align-items: center;
+ gap: 16px;
+ row-gap: 8px; /* optional: tighter vertical spacing if it wraps */
+}
+
+.task-manager-google {
+ font-size: 0.85rem;
+ padding: 6px 12px;
+ border-radius: 6px;
+ background-color: #4285f4;
+ color: white;
+ border: none;
+ cursor: pointer;
+ white-space: nowrap;
+ transition: background-color 0.2s ease;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
+}
diff --git a/src/client/views/nodes/TaskBox.tsx b/src/client/views/nodes/TaskBox.tsx
index df81d9c69..e755c6fe3 100644
--- a/src/client/views/nodes/TaskBox.tsx
+++ b/src/client/views/nodes/TaskBox.tsx
@@ -254,6 +254,48 @@ export class TaskBox extends React.Component<TaskBoxProps> {
<input type="checkbox" checked={isCompleted} onChange={this.toggleComplete} />
Complete
</label>
+
+ <button
+ className="task-manager-google"
+ onClick={async event => {
+ event.preventDefault();
+
+ console.log('GT button clicked');
+ try {
+ const token = await GoogleAuthenticationManager.Instance.fetchOrGenerateAccessToken();
+ console.log('Got token', token);
+
+ const response = await fetch('/googleTasks/create', {
+ method: 'POST',
+ credentials: 'include',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${token}`,
+ },
+ body: JSON.stringify({
+ title: taskTitle || 'Untitled Task',
+ notes: taskDesc,
+ due: allDay ? new Date(String(doc.$task_dateRange)?.split('|')[0]).toISOString() : (doc.$task_endTime instanceof DateField && doc.$task_endTime.date?.toISOString()) || undefined,
+ status: doc.$task_completed ? 'completed' : 'needsAction',
+ completed: doc.$task_completed ? new Date().toISOString() : undefined,
+ }),
+ });
+
+ const result = await response.json();
+ console.log('Google Task result:', result);
+
+ if (result?.id) {
+ alert('✅ Task sent to Google Tasks!');
+ } else {
+ alert(`❌ Failed: ${result?.error?.message || 'Unknown error'}`);
+ }
+ } catch (err) {
+ console.error('Fetch error:', err);
+ alert('❌ Task creation failed.');
+ }
+ }}>
+ Add to Google
+ </button>
</div>
{!allDay && (
@@ -268,104 +310,6 @@ export class TaskBox extends React.Component<TaskBoxProps> {
</label>
</div>
)}
-
- {/** test button */}
- {/* <button
- className="task-manager-google"
- onClick={async () => {
- console.log('GT button clicked');
- const token = await GoogleAuthenticationManager.Instance.fetchOrGenerateAccessToken();
- console.log('Got token', token);
-
- try {
- const response = await fetch('/googleTasks/create', {
- method: 'POST',
- credentials: 'include',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${token}`,
- },
- body: JSON.stringify({
- title: taskTitle || 'Untitled Task',
- notes: taskDesc,
- due: allDay ? String(doc.$task_dateRange)?.split('|')[0] + 'T23:59:00Z' : (doc.$task_endTime instanceof DateField && doc.$task_endTime.date?.toISOString()) || undefined,
- }),
- });
-
- const result = await response.text();
- console.log('Google Task result:', result);
- alert(result?.id ? 'Task sent to Google Tasks!' : `Failed: ${result?.error?.message || 'Unknown error'}`);
- } catch (err) {
- console.error('Fetch error:', err);
- alert('Fetch failed: ');
- }
- }}>
- GT
- </button> */}
-
- {/* <button
- className="task-manager-google"
- onClick={async () => {
- console.log('GT button clicked');
- const url = await Networking.FetchFromServer('/readGoogleAccessToken');
- console.log('🔗 Redirecting to Google auth:', url);
- window.location.href = url; // Redirect user to authenticate
- }}
- >
- GT
- </button> */}
-
- <button
- className="task-manager-google"
- onClick={async event => {
- event.preventDefault();
-
- console.log('GT button clicked');
- try {
- const token = await GoogleAuthenticationManager.Instance.fetchOrGenerateAccessToken();
- if (token === undefined) {
- const listener = () => {
- if (confirm('✅ Try again?')) {
- // refactor this click function and call it again
- }
- window.removeEventListener('focusin', listener);
- };
- setTimeout(() => window.addEventListener('focusin', listener), 100);
- return;
- }
- console.log('Got token', token);
-
- const response = await fetch('/googleTasks/create', {
- method: 'POST',
- credentials: 'include',
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${token}`,
- },
- body: JSON.stringify({
- title: taskTitle || 'Untitled Task',
- notes: taskDesc,
- due: allDay ? String(doc.$task_dateRange)?.split('|')[0] + 'T23:59:00Z' : (doc.$task_endTime instanceof DateField && doc.$task_endTime.date?.toISOString()) || undefined,
- status: doc.$task_completed ? 'completed' : 'needsAction',
- completed: doc.$task_completed ? new Date().toISOString() : undefined,
- }),
- });
-
- const result = await response.json();
- console.log('Google Task result:', result);
-
- if (result?.id) {
- alert('✅ Task sent to Google Tasks!');
- } else {
- alert(`❌ Failed: ${result?.error?.message || 'Unknown error'}`);
- }
- } catch (err) {
- console.error('Fetch error:', err);
- alert('❌ Task creation failed.');
- }
- }}>
- GT
- </button>
</div>
);
}