@attabot/complaint-app 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,149 @@
1
+ # @attabot/complaint-app
2
+
3
+ Complaint Management UI as an npm package. Built with **atomic design** (atoms → molecules → organisms) so the parent app can mount a ready dashboard that uses the **parent’s auth token and API base URL**.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @attabot/complaint-app
9
+ ```
10
+
11
+ Peer dependencies:
12
+
13
+ ```bash
14
+ npm install react react-dom
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```jsx
20
+ import ComplaintApp from '@attabot/complaint-app';
21
+ import '@attabot/complaint-app/style.css';
22
+ import brandTheme from './brandTheme.json'; // static theme file
23
+
24
+ function App() {
25
+ const [darkMode, setDarkMode] = useState(false); // owned by parent
26
+
27
+ return (
28
+ <ComplaintApp
29
+ apiUrl="https://your-api.example.com"
30
+ authToken={sessionToken}
31
+ theme={brandTheme}
32
+ darkMode={darkMode}
33
+ systemsEndpoint="/api/v1/complaint-systems"
34
+ onCreateForm={() => navigate('/forms/new')}
35
+ onConfigure={(system) => navigate(`/systems/${system.id}`)}
36
+ />
37
+ );
38
+ }
39
+ ```
40
+
41
+ ### Theme & dark mode (parent-controlled)
42
+
43
+ Pass a static theme file (JSON/JS) and toggle `darkMode` from the parent. The package applies CSS variables across the whole UI.
44
+
45
+ ```jsx
46
+ import brandTheme from './brandTheme.json';
47
+
48
+ <ComplaintApp theme={brandTheme} darkMode={isDark} />
49
+ ```
50
+
51
+ Theme file shape:
52
+
53
+ ```json
54
+ {
55
+ "light": { "colors": { "primary": "#2D64B8", "background": "#F5F5F5" } },
56
+ "dark": { "colors": { "primary": "#5B8DEF", "background": "#0F1115" } }
57
+ }
58
+ ```
59
+
60
+ Or pass flat overrides (merged into both modes):
61
+
62
+ ```jsx
63
+ <ComplaintApp theme={{ colors: { primary: '#0F766E' } }} darkMode={false} />
64
+ ```
65
+
66
+ Helpers / defaults are exported: `lightTheme`, `darkTheme`, `defaultThemeFile`, `useTheme`.
67
+
68
+ ### Pass data from the parent (no fetch)
69
+
70
+ ```jsx
71
+ <ComplaintApp
72
+ apiUrl={apiUrl}
73
+ authToken={authToken}
74
+ useDemoData={false}
75
+ systems={[
76
+ {
77
+ id: 'qms',
78
+ title: 'QMS - Query Management System',
79
+ status: 'active',
80
+ description: 'Description of the template',
81
+ departments: 3,
82
+ workflows: 12,
83
+ fields: 55,
84
+ formsFilled: 234,
85
+ updatedOn: '12 Mar 2024',
86
+ titleAsLink: true,
87
+ },
88
+ ]}
89
+ onCreateForm={handleCreate}
90
+ onConfigure={handleConfigure}
91
+ />
92
+ ```
93
+
94
+ ## Props
95
+
96
+ | Prop | Type | Default | Description |
97
+ |------|------|---------|-------------|
98
+ | `apiUrl` | `string` | env `VITE_API_URL` | Base URL for axios requests |
99
+ | `authToken` | `string` | — | Bearer token stored for API calls |
100
+ | `theme` | `object` | built-in light/dark | Static theme file or token overrides |
101
+ | `darkMode` | `boolean` | `false` | Parent-controlled dark mode |
102
+ | `basePath` | `string` | `'/'` | React Router basename when nested |
103
+ | `systems` | `array` | — | Parent-controlled system list |
104
+ | `systemsEndpoint` | `string` | — | GET path relative to `apiUrl` |
105
+ | `useDemoData` | `boolean` | `true` | Show design demo cards when no data |
106
+ | `title` | `string` | `'Complaint Management'` | Page title |
107
+ | `description` | `string` | lorem placeholder | Page subtitle |
108
+ | `createLabel` | `string` | `'Create New Form'` | Primary CTA label |
109
+ | `onCreateForm` | `fn` | — | Create button handler |
110
+ | `onConfigure` | `fn(system)` | — | Configure button handler |
111
+ | `onTitleClick` | `fn(system)` | — | Title link click |
112
+ | `onDescriptionClick` | `fn` | — | Description link click |
113
+ | `onSearch` | `fn(query)` | — | Search change callback |
114
+ | `onPublish` | `fn` | — | Review & Publish handler |
115
+ | `onStepChange` | `fn` | — | Settings step change callback |
116
+
117
+ ## Atomic structure
118
+
119
+ ```
120
+ src/components/
121
+ atoms/ Button, Input, Typography, StatusBadge, Divider, Icons, Loading
122
+ molecules/ SearchBar, DataPoint, CardHeader, CardFooter
123
+ organisms/ PageHeader, SystemCard, SystemCardGrid
124
+ ```
125
+
126
+ Named exports are available for reuse in the parent:
127
+
128
+ ```jsx
129
+ import { Button, SearchBar, SystemCard, api } from '@attabot/complaint-app';
130
+ ```
131
+
132
+ ## Auth & API
133
+
134
+ 1. Parent passes `apiUrl` + `authToken` into `ComplaintApp` / `ApiProvider`.
135
+ 2. Package axios client (`api`) attaches `Authorization: Bearer …` and uses the parent base URL.
136
+ 3. Optional token refresh against `POST /api/v1/auth/refresh` when a `refreshToken` cookie exists.
137
+ 4. No product/business APIs are hardcoded — provide `systems` or `systemsEndpoint`.
138
+
139
+ ## Development
140
+
141
+ ```bash
142
+ npm install
143
+ npm run dev # preview Complaint Management UI
144
+ npm run build # emit dist/ for publishing
145
+ ```
146
+
147
+ ## License
148
+
149
+ MIT