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",
|
||||
"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",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
|
||||
@ -92,6 +92,8 @@ model User {
|
||||
accountNumber Int @unique @default(autoincrement())
|
||||
showCompletedTasks Boolean @default(true)
|
||||
showLines Boolean @default(true)
|
||||
weekdayFormat String? @default("long")
|
||||
customWeekdayNames String? @default("")
|
||||
startDayOffset Int @default(-1)
|
||||
quoteSourceUrls String[] @default([])
|
||||
accounts Account[]
|
||||
|
||||
@ -83,6 +83,8 @@ export async function GET(request: NextRequest) {
|
||||
showCompletedTasks: true,
|
||||
showLines: true,
|
||||
startDayOffset: true,
|
||||
weekdayFormat: true,
|
||||
customWeekdayNames: true,
|
||||
quoteSourceUrls: true,
|
||||
accountNumber: true,
|
||||
createdAt: true
|
||||
@ -126,7 +128,7 @@ export async function PATCH(request: NextRequest) {
|
||||
cwFontFamily, cwFontSize, cwFontWeight, cwColor,
|
||||
yearFontFamily, yearFontSize, yearFontWeight, yearColor,
|
||||
showTaskCheckboxes, dayHeaderGap,
|
||||
showCompletedTasks, showLines, startDayOffset, quoteSourceUrls
|
||||
showCompletedTasks, showLines, startDayOffset, weekdayFormat, customWeekdayNames, quoteSourceUrls
|
||||
} = body;
|
||||
|
||||
const updateData: any = {
|
||||
@ -199,6 +201,8 @@ export async function PATCH(request: NextRequest) {
|
||||
...(showCompletedTasks !== undefined && { showCompletedTasks }),
|
||||
...(showLines !== undefined && { showLines }),
|
||||
...(startDayOffset !== undefined && { startDayOffset }),
|
||||
...(weekdayFormat !== undefined && { weekdayFormat }),
|
||||
...(customWeekdayNames !== undefined && { customWeekdayNames }),
|
||||
...(quoteSourceUrls !== undefined && { quoteSourceUrls }),
|
||||
};
|
||||
if (password && password.trim() !== "") {
|
||||
@ -280,6 +284,8 @@ export async function PATCH(request: NextRequest) {
|
||||
showCompletedTasks: true,
|
||||
showLines: true,
|
||||
startDayOffset: true,
|
||||
weekdayFormat: true,
|
||||
customWeekdayNames: true,
|
||||
quoteSourceUrls: true,
|
||||
accountNumber: true,
|
||||
}
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
import React, { useState, useRef, useEffect } from "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";
|
||||
|
||||
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={{ 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 */}
|
||||
{task.subTasks && task.subTasks.length > 0 && (() => {
|
||||
const completed = task.subTasks.filter(s => s.completed).length;
|
||||
|
||||
@ -4731,7 +4731,7 @@ export default function WeeklyView() {
|
||||
</div>
|
||||
|
||||
{/* Date Picker Toggle */}
|
||||
<div className="relative">
|
||||
<div className="relative" style={{ zIndex: showDatePicker ? 2001 : "auto" }}>
|
||||
<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"}`}
|
||||
onClick={() => setShowDatePicker(!showDatePicker)}
|
||||
@ -6998,11 +6998,11 @@ function TaskItem({
|
||||
outline: "none",
|
||||
width: "100%",
|
||||
padding: "0",
|
||||
fontSize: "0.9375rem",
|
||||
fontWeight: 500,
|
||||
resize: "none",
|
||||
overflow: "hidden",
|
||||
fontFamily: "inherit",
|
||||
fontSize: "inherit",
|
||||
fontWeight: "inherit",
|
||||
lineHeight: "inherit",
|
||||
}}
|
||||
/>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user