feat(web): add kanban board + list view + filtering to My Issues page
Upgrade /my-issues from a simple accordion to a full-featured view matching /issues — kanban board, list view, status/priority filtering, sorting, and display settings, scoped to the user's own issues. Key changes: - Extract view store factory (createIssueViewStore) using zustand v5 vanilla createStore + React Context for shared component reuse - Create ViewStoreProvider + useViewStore/useViewStoreApi hooks - Decouple BoardView, BoardColumn, BoardCard, ListView from global useIssueViewStore — they now read from context - New independent persisted store for /my-issues (multica_my_issues_view) - Simplified MyIssuesHeader (no assignee/creator filters) - Pre-filter logic: assigned to me ∪ my agents ∪ created by me - Generalize workspace sync to clear filters on all registered stores - Fix existing debt: text-[10px] → text-xs, w-44 → w-auto, reduce unnecessary selector subscriptions in both headers Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
fe963d672d
commit
3c5a3b5e6a
15 changed files with 737 additions and 305 deletions
|
|
@ -13,7 +13,8 @@ import { useIssueStore } from "@/features/issues/store";
|
|||
import { PriorityIcon } from "./priority-icon";
|
||||
import { PriorityPicker, AssigneePicker, DueDatePicker } from "./pickers";
|
||||
import { PRIORITY_CONFIG } from "@/features/issues/config";
|
||||
import { useIssueViewStore, type CardProperties } from "@/features/issues/stores/view-store";
|
||||
import type { CardProperties } from "@/features/issues/stores/view-store";
|
||||
import { useViewStore } from "@/features/issues/stores/view-store-context";
|
||||
|
||||
function formatDate(date: string): string {
|
||||
return new Date(date).toLocaleDateString("en-US", {
|
||||
|
|
@ -42,7 +43,7 @@ export const BoardCardContent = memo(function BoardCardContent({
|
|||
issue: Issue;
|
||||
editable?: boolean;
|
||||
}) {
|
||||
const storeProperties = useIssueViewStore((s) => s.cardProperties);
|
||||
const storeProperties = useViewStore((s) => s.cardProperties);
|
||||
const priorityCfg = PRIORITY_CONFIG[issue.priority];
|
||||
|
||||
const handleUpdate = useCallback(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue