@fayz-ai/plugin-tasks 0.1.1 → 0.1.2
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 +46 -0
- package/package.json +4 -4
- package/src/migrations/001_tasks_base.sql +10 -2
package/README.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# @fayz-ai/plugin-tasks
|
|
2
|
+
|
|
3
|
+
> A task list that lives in your topbar, in every app you compose.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@fayz-ai/plugin-tasks)
|
|
6
|
+
[](https://github.com/FayaLabs/fayz-sdk/blob/main/LICENSE)
|
|
7
|
+
|
|
8
|
+
Work happens between the records. A salon owner needs to "call the supplier," a clinic admin needs to "follow up on lab results" — small things that never fit neatly into a booking or an invoice. `plugin-tasks` gives every Fayz app a lightweight, always-available task list: a topbar button that opens a drawer for quick-add, statuses, priorities, due dates, labels, and assignees.
|
|
9
|
+
|
|
10
|
+
It's deliberately small and zero-config. Drop it in and it owns its own tables (via a bundled migration), picks Supabase or an in-memory mock automatically, and exposes its summary to the AI assistant — so "what's overdue?" just works. No page to wire, no nav slot to claim; tasks ride along with whatever vertical you compose.
|
|
11
|
+
|
|
12
|
+
## What's inside
|
|
13
|
+
- **Topbar task drawer** — a widget mounted at `shell.topbar.end` for quick-add and review, available on every page.
|
|
14
|
+
- **Task model** — title, description, status (todo / in progress / done / cancelled), priority (low / medium / high / urgent), due date, labels, assignee, and subtasks (parent/child).
|
|
15
|
+
- **AI tool** — `getTasksSummary` reports totals, overdue, due-today, and breakdowns by status and priority.
|
|
16
|
+
- **Bundled migration** — creates `tsk_tasks` and `tsk_labels` with tenant-scoped RLS, so it's self-installing.
|
|
17
|
+
- **Settings tab** + i18n, with a Supabase-or-mock data provider chosen automatically.
|
|
18
|
+
- Configurable labels and a default priority for new tasks.
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
```bash
|
|
22
|
+
npm install @fayz-ai/plugin-tasks
|
|
23
|
+
```
|
|
24
|
+
Peer deps: `react`, `react-dom`. Runtime deps include `@fayz-ai/core`, `@fayz-ai/ui`, and `@fayz-ai/saas`.
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
```tsx
|
|
28
|
+
import { defineSaas } from '@fayz-ai/saas'
|
|
29
|
+
import { createTasksPlugin } from '@fayz-ai/plugin-tasks'
|
|
30
|
+
|
|
31
|
+
export const app = defineSaas({
|
|
32
|
+
// ...
|
|
33
|
+
plugins: [
|
|
34
|
+
createTasksPlugin({
|
|
35
|
+
defaultPriority: 'medium',
|
|
36
|
+
labels: { drawerTitle: 'To-dos', quickAddPlaceholder: 'Add a to-do...' },
|
|
37
|
+
}),
|
|
38
|
+
],
|
|
39
|
+
})
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Part of the Fayz SDK
|
|
43
|
+
`plugin-tasks` is the lightweight companion plugin: no navigation of its own, it simply adds a task surface to any app built with `@fayz-ai/saas`. It complements heavier plugins like `@fayz-ai/plugin-agenda` and `@fayz-ai/plugin-financial` by capturing the loose work around them.
|
|
44
|
+
|
|
45
|
+
## Roadmap & contributing
|
|
46
|
+
Built and evolving in the open. See the [Fayz SDK roadmap](../../docs/ROADMAP.md#plugin-tasks) for current gaps, missing features, and good first issues.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fayz-ai/plugin-tasks",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Fayz SDK — plugin-tasks plugin",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"lucide-react": "^0.400.0",
|
|
27
27
|
"zustand": "^4.5.0",
|
|
28
|
-
"@fayz-ai/core": "^0.1.
|
|
29
|
-
"@fayz-ai/
|
|
30
|
-
"@fayz-ai/
|
|
28
|
+
"@fayz-ai/core": "^0.1.7",
|
|
29
|
+
"@fayz-ai/ui": "^0.1.7",
|
|
30
|
+
"@fayz-ai/saas": "^0.1.7"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/react": "^18.3.0",
|
|
@@ -42,16 +42,24 @@ CREATE INDEX IF NOT EXISTS idx_tsk_tasks_assigned ON public.tsk_tasks(assigned_t
|
|
|
42
42
|
CREATE INDEX IF NOT EXISTS idx_tsk_tasks_due ON public.tsk_tasks(tenant_id, due_date)
|
|
43
43
|
WHERE due_date IS NOT NULL;
|
|
44
44
|
|
|
45
|
-
-- RLS policies for tsk_tasks
|
|
45
|
+
-- RLS policies for tsk_tasks (idempotent — DROP IF EXISTS before CREATE)
|
|
46
|
+
DROP POLICY IF EXISTS tsk_tasks_select ON public.tsk_tasks;
|
|
46
47
|
CREATE POLICY tsk_tasks_select ON public.tsk_tasks FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));
|
|
48
|
+
DROP POLICY IF EXISTS tsk_tasks_insert ON public.tsk_tasks;
|
|
47
49
|
CREATE POLICY tsk_tasks_insert ON public.tsk_tasks FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));
|
|
50
|
+
DROP POLICY IF EXISTS tsk_tasks_update ON public.tsk_tasks;
|
|
48
51
|
CREATE POLICY tsk_tasks_update ON public.tsk_tasks FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));
|
|
52
|
+
DROP POLICY IF EXISTS tsk_tasks_delete ON public.tsk_tasks;
|
|
49
53
|
CREATE POLICY tsk_tasks_delete ON public.tsk_tasks FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));
|
|
50
54
|
GRANT SELECT, INSERT, UPDATE, DELETE ON public.tsk_tasks TO authenticated;
|
|
51
55
|
|
|
52
|
-
-- RLS policies for tsk_labels
|
|
56
|
+
-- RLS policies for tsk_labels (idempotent)
|
|
57
|
+
DROP POLICY IF EXISTS tsk_labels_select ON public.tsk_labels;
|
|
53
58
|
CREATE POLICY tsk_labels_select ON public.tsk_labels FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));
|
|
59
|
+
DROP POLICY IF EXISTS tsk_labels_insert ON public.tsk_labels;
|
|
54
60
|
CREATE POLICY tsk_labels_insert ON public.tsk_labels FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));
|
|
61
|
+
DROP POLICY IF EXISTS tsk_labels_update ON public.tsk_labels;
|
|
55
62
|
CREATE POLICY tsk_labels_update ON public.tsk_labels FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));
|
|
63
|
+
DROP POLICY IF EXISTS tsk_labels_delete ON public.tsk_labels;
|
|
56
64
|
CREATE POLICY tsk_labels_delete ON public.tsk_labels FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));
|
|
57
65
|
GRANT SELECT, INSERT, UPDATE, DELETE ON public.tsk_labels TO authenticated;
|