@fayz-ai/plugin-marketing 0.1.1 → 0.1.3
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/LICENSE +21 -0
- package/README.md +49 -0
- package/dist/index.cjs +46 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -2
- package/dist/index.js.map +1 -1
- package/dist/registries.d.ts +7 -0
- package/dist/registries.d.ts.map +1 -0
- package/package.json +4 -4
- package/src/index.ts +13 -1
- package/src/registries.ts +48 -0
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAO5E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAqB,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAChG,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAclE,MAAM,WAAW,sBAAsB;IACrC,yEAAyE;IACzE,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,yEAAyE;IACzE,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,yEAAyE;IACzE,WAAW,CAAC,EAAE,sBAAsB,CAAA;CACrC;AAgCD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,cAAc,CAqItF;AAED,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React4, { useEffect } from 'react';
|
|
2
2
|
import { registerTranslations, getSupabaseClientOptional, useTranslation } from '@fayz-ai/core';
|
|
3
|
+
import { createPluginContext, PluginSettingsPanel, useModuleNavigation, createViewRouter, ModuleActionBar, SettingsGroup, SelectRow, ToggleRow } from '@fayz-ai/saas';
|
|
3
4
|
import { defineKpiWidget, defineCustomWidget, defineTableWidget, ModulePage, DataTable, SubpageHeader, Button, DashboardCanvas, SegmentedControl, cn, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, Input, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, ModalFooter, KpiCard as KpiCard$1, Card, CardHeader, CardTitle, CardContent, TableWidget } from '@fayz-ai/ui';
|
|
4
|
-
import { createPluginContext, useModuleNavigation, createViewRouter, ModuleActionBar, SettingsGroup, SelectRow, ToggleRow } from '@fayz-ai/saas';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
6
|
import { ChevronRight, Users, Target, Percent, DollarSign, Trash2, Plus, MousePointerClick, Layers, ArrowUpRight, ArrowDownRight, Bike, Utensils, DoorOpen, MessageCircle, Instagram, Mail, Globe, Megaphone, Search, Link2, Trophy } from 'lucide-react';
|
|
7
7
|
import { createStore } from 'zustand/vanilla';
|
|
@@ -577,6 +577,42 @@ function SettingsView() {
|
|
|
577
577
|
] })
|
|
578
578
|
] });
|
|
579
579
|
}
|
|
580
|
+
|
|
581
|
+
// src/registries.ts
|
|
582
|
+
var KIND_OPTIONS = [
|
|
583
|
+
{ value: "paid", label: "Paid" },
|
|
584
|
+
{ value: "organic", label: "Organic" },
|
|
585
|
+
{ value: "social", label: "Social" },
|
|
586
|
+
{ value: "referral", label: "Referral" },
|
|
587
|
+
{ value: "direct", label: "Direct" },
|
|
588
|
+
{ value: "outbound", label: "Outbound" }
|
|
589
|
+
];
|
|
590
|
+
var channelEntity = {
|
|
591
|
+
name: "Channel",
|
|
592
|
+
namePlural: "Channels",
|
|
593
|
+
icon: "Radio",
|
|
594
|
+
displayField: "label",
|
|
595
|
+
defaultSort: "label",
|
|
596
|
+
fields: [
|
|
597
|
+
{ key: "label", label: "Channel", type: "text", required: true, showInTable: true, searchable: true },
|
|
598
|
+
{ key: "kind", label: "Type", type: "select", options: KIND_OPTIONS, showInTable: true },
|
|
599
|
+
{ key: "icon", label: "Icon", type: "text", showInTable: true }
|
|
600
|
+
],
|
|
601
|
+
facets: [{ field: "kind" }]
|
|
602
|
+
};
|
|
603
|
+
function buildMarketingRegistries(channels) {
|
|
604
|
+
return [
|
|
605
|
+
{
|
|
606
|
+
id: "channels",
|
|
607
|
+
entity: channelEntity,
|
|
608
|
+
icon: "Radio",
|
|
609
|
+
description: "Acquisition channels tracked for this workspace",
|
|
610
|
+
display: "table",
|
|
611
|
+
readOnly: true,
|
|
612
|
+
seedData: channels.map((c) => ({ id: c.id, label: c.label, kind: c.kind, icon: c.icon }))
|
|
613
|
+
}
|
|
614
|
+
];
|
|
615
|
+
}
|
|
580
616
|
function useEnsureMarketingData() {
|
|
581
617
|
const overview = useMarketingStore((s) => s.overview);
|
|
582
618
|
const loading = useMarketingStore((s) => s.loading);
|
|
@@ -1228,10 +1264,17 @@ function createMarketingPlugin(options) {
|
|
|
1228
1264
|
React4.createElement(MarketingPage, { config, provider, store })
|
|
1229
1265
|
);
|
|
1230
1266
|
PageComponent.displayName = "MarketingPage";
|
|
1267
|
+
const marketingRegistries = buildMarketingRegistries(config.channels);
|
|
1231
1268
|
const SettingsComponent = () => React4.createElement(
|
|
1232
1269
|
MarketingContextProvider,
|
|
1233
1270
|
{ config, provider, store },
|
|
1234
|
-
React4.createElement(
|
|
1271
|
+
React4.createElement(PluginSettingsPanel, {
|
|
1272
|
+
title: config.labels.settings ?? config.labels.pageTitle,
|
|
1273
|
+
subtitle: config.labels.pageSubtitle,
|
|
1274
|
+
generalSettings: React4.createElement(SettingsView),
|
|
1275
|
+
registries: marketingRegistries,
|
|
1276
|
+
routeBase: "/settings/marketing"
|
|
1277
|
+
})
|
|
1235
1278
|
);
|
|
1236
1279
|
SettingsComponent.displayName = "MarketingSettings";
|
|
1237
1280
|
return {
|
|
@@ -1327,6 +1370,7 @@ function createMarketingPlugin(options) {
|
|
|
1327
1370
|
permission: { feature: "marketing", action: "create" }
|
|
1328
1371
|
}
|
|
1329
1372
|
],
|
|
1373
|
+
registries: marketingRegistries,
|
|
1330
1374
|
settings: [
|
|
1331
1375
|
{
|
|
1332
1376
|
id: "marketing",
|