feat: provider icons in time grid, fix weekday names persistence, calendar z-index
- Add sync provider icons (Google, Microsoft, Apple, Synology) to GridTaskBlock so they show in weekday time slots - Add weekdayFormat and customWeekdayNames fields to Prisma schema and profile API so custom weekday names persist across reloads - Fix Jump to Date calendar z-index by elevating container when open - Fix someday textarea font to inherit from CSS instead of hardcoded values v1.18.0 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
7f04750e4a
commit
05dab0720b
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "my-weekly-todo-list",
|
"name": "my-weekly-todo-list",
|
||||||
"version": "1.17.2",
|
"version": "1.18.0",
|
||||||
"description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view",
|
"description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@ -92,6 +92,8 @@ model User {
|
|||||||
accountNumber Int @unique @default(autoincrement())
|
accountNumber Int @unique @default(autoincrement())
|
||||||
showCompletedTasks Boolean @default(true)
|
showCompletedTasks Boolean @default(true)
|
||||||
showLines Boolean @default(true)
|
showLines Boolean @default(true)
|
||||||
|
weekdayFormat String? @default("long")
|
||||||
|
customWeekdayNames String? @default("")
|
||||||
startDayOffset Int @default(-1)
|
startDayOffset Int @default(-1)
|
||||||
quoteSourceUrls String[] @default([])
|
quoteSourceUrls String[] @default([])
|
||||||
accounts Account[]
|
accounts Account[]
|
||||||
|
|||||||
@ -83,6 +83,8 @@ export async function GET(request: NextRequest) {
|
|||||||
showCompletedTasks: true,
|
showCompletedTasks: true,
|
||||||
showLines: true,
|
showLines: true,
|
||||||
startDayOffset: true,
|
startDayOffset: true,
|
||||||
|
weekdayFormat: true,
|
||||||
|
customWeekdayNames: true,
|
||||||
quoteSourceUrls: true,
|
quoteSourceUrls: true,
|
||||||
accountNumber: true,
|
accountNumber: true,
|
||||||
createdAt: true
|
createdAt: true
|
||||||
@ -126,7 +128,7 @@ export async function PATCH(request: NextRequest) {
|
|||||||
cwFontFamily, cwFontSize, cwFontWeight, cwColor,
|
cwFontFamily, cwFontSize, cwFontWeight, cwColor,
|
||||||
yearFontFamily, yearFontSize, yearFontWeight, yearColor,
|
yearFontFamily, yearFontSize, yearFontWeight, yearColor,
|
||||||
showTaskCheckboxes, dayHeaderGap,
|
showTaskCheckboxes, dayHeaderGap,
|
||||||
showCompletedTasks, showLines, startDayOffset, quoteSourceUrls
|
showCompletedTasks, showLines, startDayOffset, weekdayFormat, customWeekdayNames, quoteSourceUrls
|
||||||
} = body;
|
} = body;
|
||||||
|
|
||||||
const updateData: any = {
|
const updateData: any = {
|
||||||
@ -199,6 +201,8 @@ export async function PATCH(request: NextRequest) {
|
|||||||
...(showCompletedTasks !== undefined && { showCompletedTasks }),
|
...(showCompletedTasks !== undefined && { showCompletedTasks }),
|
||||||
...(showLines !== undefined && { showLines }),
|
...(showLines !== undefined && { showLines }),
|
||||||
...(startDayOffset !== undefined && { startDayOffset }),
|
...(startDayOffset !== undefined && { startDayOffset }),
|
||||||
|
...(weekdayFormat !== undefined && { weekdayFormat }),
|
||||||
|
...(customWeekdayNames !== undefined && { customWeekdayNames }),
|
||||||
...(quoteSourceUrls !== undefined && { quoteSourceUrls }),
|
...(quoteSourceUrls !== undefined && { quoteSourceUrls }),
|
||||||
};
|
};
|
||||||
if (password && password.trim() !== "") {
|
if (password && password.trim() !== "") {
|
||||||
@ -280,6 +284,8 @@ export async function PATCH(request: NextRequest) {
|
|||||||
showCompletedTasks: true,
|
showCompletedTasks: true,
|
||||||
showLines: true,
|
showLines: true,
|
||||||
startDayOffset: true,
|
startDayOffset: true,
|
||||||
|
weekdayFormat: true,
|
||||||
|
customWeekdayNames: true,
|
||||||
quoteSourceUrls: true,
|
quoteSourceUrls: true,
|
||||||
accountNumber: true,
|
accountNumber: true,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
import React, { useState, useRef, useEffect } from "react";
|
import React, { useState, useRef, useEffect } from "react";
|
||||||
import { Repeat, Circle, X } from "lucide-react";
|
import { Repeat, Circle, X } from "lucide-react";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import { faGoogle, faMicrosoft, faApple } from "@fortawesome/free-brands-svg-icons";
|
||||||
|
import { faServer } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { Task } from "./WeeklyView";
|
import { Task } from "./WeeklyView";
|
||||||
|
|
||||||
interface GridTaskBlockProps {
|
interface GridTaskBlockProps {
|
||||||
@ -271,7 +274,28 @@ export function GridTaskBlock({
|
|||||||
)}
|
)}
|
||||||
<span style={task.completed && showTaskCheckboxes ? { opacity: 0.5, flex: 1, display: "flex", alignItems: "center", flexWrap: "wrap", rowGap: "2px" } : { flex: 1, display: "flex", alignItems: "center", flexWrap: "wrap", rowGap: "2px" }}>
|
<span style={task.completed && showTaskCheckboxes ? { opacity: 0.5, flex: 1, display: "flex", alignItems: "center", flexWrap: "wrap", rowGap: "2px" } : { flex: 1, display: "flex", alignItems: "center", flexWrap: "wrap", rowGap: "2px" }}>
|
||||||
<span style={{ marginRight: "4px" }}>{task.title}</span>
|
<span style={{ marginRight: "4px" }}>{task.title}</span>
|
||||||
|
{(() => {
|
||||||
|
const provider = task.externalProvider
|
||||||
|
|| (task.externalId?.startsWith("synology::") ? "synology" : null);
|
||||||
|
if (!provider) return null;
|
||||||
|
const iconMap: Record<string, { icon: any; color: string; label: string }> = {
|
||||||
|
google: { icon: faGoogle, color: "#4285F4", label: "Google" },
|
||||||
|
outlook: { icon: faMicrosoft, color: "#0078D4", label: "Microsoft" },
|
||||||
|
apple: { icon: faApple, color: "#555", label: "Apple" },
|
||||||
|
synology: { icon: faServer, color: "#007AFF", label: "Synology" },
|
||||||
|
};
|
||||||
|
const info = iconMap[provider];
|
||||||
|
if (!info) return null;
|
||||||
|
return (
|
||||||
|
<span
|
||||||
|
className="flex-shrink-0"
|
||||||
|
title={`Synced with ${info.label}`}
|
||||||
|
style={{ display: "inline-flex", alignItems: "center", opacity: 0.55 }}
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon icon={info.icon} style={{ width: 10, height: 10, color: info.color }} />
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
})()}
|
||||||
{/* Subtask indicator */}
|
{/* Subtask indicator */}
|
||||||
{task.subTasks && task.subTasks.length > 0 && (() => {
|
{task.subTasks && task.subTasks.length > 0 && (() => {
|
||||||
const completed = task.subTasks.filter(s => s.completed).length;
|
const completed = task.subTasks.filter(s => s.completed).length;
|
||||||
|
|||||||
@ -4731,7 +4731,7 @@ export default function WeeklyView() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Date Picker Toggle */}
|
{/* Date Picker Toggle */}
|
||||||
<div className="relative">
|
<div className="relative" style={{ zIndex: showDatePicker ? 2001 : "auto" }}>
|
||||||
<button
|
<button
|
||||||
className={`p-1.5 hover:bg-gray-100 rounded-md transition-colors ${showDatePicker ? "text-teal-600 bg-teal-50" : "text-gray-500 hover:text-black"}`}
|
className={`p-1.5 hover:bg-gray-100 rounded-md transition-colors ${showDatePicker ? "text-teal-600 bg-teal-50" : "text-gray-500 hover:text-black"}`}
|
||||||
onClick={() => setShowDatePicker(!showDatePicker)}
|
onClick={() => setShowDatePicker(!showDatePicker)}
|
||||||
@ -6998,11 +6998,11 @@ function TaskItem({
|
|||||||
outline: "none",
|
outline: "none",
|
||||||
width: "100%",
|
width: "100%",
|
||||||
padding: "0",
|
padding: "0",
|
||||||
fontSize: "0.9375rem",
|
|
||||||
fontWeight: 500,
|
|
||||||
resize: "none",
|
resize: "none",
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
fontFamily: "inherit",
|
fontFamily: "inherit",
|
||||||
|
fontSize: "inherit",
|
||||||
|
fontWeight: "inherit",
|
||||||
lineHeight: "inherit",
|
lineHeight: "inherit",
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user