File size: 6,241 Bytes
50a8ea3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import React from 'react';

interface AppealTrackerModalProps {
  onClose: () => void;
  onOpenWorkspace: () => void;
}

export const AppealTrackerModal: React.FC<AppealTrackerModalProps> = ({

  onClose,

  onOpenWorkspace,

}) => {
  const milestones = [
    {
      title: 'Formal Filing Submitted',
      date: 'Oct 24, 2024 • 10:14 AM',
      description: 'Request dispatched to Sgt. Amanda Reyes via electronic statutory gateway.',
      status: 'completed',
    },
    {
      title: 'Agency Acknowledgement & Tracking ID',
      date: 'Oct 24, 2024 • 02:40 PM',
      description: 'Formal confirmation received. Reference ID: #SPD-REC-8932.',
      status: 'completed',
    },
    {
      title: 'PIO Records Custodian Review',
      date: 'In Progress • 18 Days Remaining',
      description: 'Records Division reviewing bodycam video timestamps for redactions.',
      status: 'current',
    },
    {
      title: 'Release of Non-Exempt Records',
      date: 'Est. Nov 11, 2024',
      description: 'Electronic PDF/MP4 link generation and delivery to requester vault.',
      status: 'upcoming',
    },
    {
      title: 'First Appellate Authority Escalation (If Delayed)',
      date: 'Automated if no response by Day 20',
      description: 'Automatic generation of Section 19 First Appeal petition.',
      status: 'upcoming',
    },
  ];

  return (
    <div className="fixed inset-0 bg-black/50 backdrop-blur-xs flex items-center justify-center p-4 z-50 animate-in fade-in duration-200">

      <div className="bg-white rounded-2xl max-w-2xl w-full max-h-[85vh] flex flex-col shadow-2xl border border-[#E2E8F0] overflow-hidden">

        {/* Header */}

        <div className="p-6 border-b border-[#E2E8F0] flex justify-between items-center bg-[#F8FAFC]">

          <div>

            <div className="flex items-center gap-2">

              <span className="material-symbols-outlined text-[#006c4a] text-[24px]">track_changes</span>

              <h2 className="font-headline font-bold text-[20px] text-[#0F172A]">

                Appeal & Filing Tracker

              </h2>

            </div>

            <p className="text-[13px] text-[#64748B] mt-0.5">

              Case #CL-2024-8932 • Public Records Request

            </p>

          </div>

          <button

            onClick={onClose}

            className="w-8 h-8 rounded-full flex items-center justify-center text-[#64748B] hover:text-[#0F172A] hover:bg-[#E2E8F0] transition-colors cursor-pointer"

          >

            <span className="material-symbols-outlined text-[20px]">close</span>

          </button>

        </div>



        {/* Timeline body */}

        <div className="p-6 overflow-y-auto flex-grow flex flex-col gap-6">

          <div className="bg-[#F0FDF4] border border-[#86EFAC] rounded-xl p-4 flex items-center justify-between">

            <div className="flex items-center gap-3">

              <div className="w-9 h-9 rounded-full bg-[#006c4a] text-white flex items-center justify-center">

                <span className="material-symbols-outlined text-[18px]">verified</span>

              </div>

              <div>

                <div className="text-[14px] font-bold text-[#0F172A]">

                  Statutory Clock: On Schedule

                </div>

                <div className="text-[12px] text-[#166534]">

                  Agency response window expires in 18 calendar days.

                </div>

              </div>

            </div>

            <span className="bg-[#DCFCE7] text-[#166534] font-bold text-[11px] px-2.5 py-1 rounded-full uppercase tracking-wider">

              Healthy

            </span>

          </div>



          <div className="relative pl-6 border-l-2 border-[#E2E8F0] ml-3 flex flex-col gap-6">

            {milestones.map((m, idx) => {

              const isCompleted = m.status === 'completed';

              const isCurrent = m.status === 'current';



              return (

                <div key={idx} className="relative">

                  {/* Step icon dot */}

                  <div

                    className={`absolute -left-[31px] top-0 w-6 h-6 rounded-full flex items-center justify-center text-[12px] font-bold ${

                      isCompleted

                        ? 'bg-[#006c4a] text-white'

                        : isCurrent

                        ? 'bg-[#0F172A] text-white ring-4 ring-[#DAE2FD]'

                        : 'bg-[#E2E8F0] text-[#94A3B8]'

                    }`}

                  >

                    {isCompleted ? (

                      <span className="material-symbols-outlined text-[14px]">check</span>

                    ) : (

                      idx + 1

                    )}

                  </div>



                  <div>

                    <div className="flex items-center justify-between gap-2">

                      <h4 className="font-headline font-bold text-[15px] text-[#0F172A]">

                        {m.title}

                      </h4>

                      <span className="text-[12px] text-[#64748B] font-mono">{m.date}</span>

                    </div>

                    <p className="text-[13px] text-[#475569] mt-1">{m.description}</p>

                  </div>

                </div>

              );

            })}

          </div>

        </div>



        {/* Footer */}

        <div className="p-4 border-t border-[#E2E8F0] bg-[#F8FAFC] flex justify-end gap-2">

          <button

            onClick={onClose}

            className="px-4 py-2 text-[13px] text-[#64748B] hover:bg-[#E2E8F0] rounded-lg cursor-pointer"

          >

            Close

          </button>

          <button

            onClick={() => {

              onClose();

              onOpenWorkspace();

            }}

            className="px-4 py-2 text-[13px] font-medium bg-[#0F172A] text-white hover:bg-[#1E293B] rounded-lg cursor-pointer flex items-center gap-1"

          >

            <span>Open Case in Workspace</span>

            <span className="material-symbols-outlined text-[16px]">arrow_forward</span>

          </button>

        </div>

      </div>

    </div>
  );
};