@iann29/rastro 0.9.0 → 0.10.1
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 +9 -1
- package/agent/integration.md +23 -1
- package/agent/manifest.json +4 -4
- package/dist/client/federation.d.ts +114 -9
- package/dist/client/federation.d.ts.map +1 -1
- package/dist/client/federation.js +54 -2
- package/dist/client/federation.js.map +1 -1
- package/dist/client/index.d.ts +642 -8
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +391 -9
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +14 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +278 -1
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/_generated/server.d.ts +4 -0
- package/dist/component/_generated/server.d.ts.map +1 -1
- package/dist/component/_generated/server.js.map +1 -1
- package/dist/component/constants.d.ts +5 -0
- package/dist/component/constants.d.ts.map +1 -1
- package/dist/component/constants.js +10 -0
- package/dist/component/constants.js.map +1 -1
- package/dist/component/convex.config.d.ts +4 -0
- package/dist/component/convex.config.js +9 -0
- package/dist/component/convex.config.js.map +1 -1
- package/dist/component/errors.d.ts +1 -1
- package/dist/component/errors.d.ts.map +1 -1
- package/dist/component/errors.js.map +1 -1
- package/dist/component/leads.d.ts +69 -3
- package/dist/component/leads.d.ts.map +1 -1
- package/dist/component/leads.js +419 -16
- package/dist/component/leads.js.map +1 -1
- package/dist/component/meta.d.ts +358 -0
- package/dist/component/meta.d.ts.map +1 -0
- package/dist/component/meta.js +1295 -0
- package/dist/component/meta.js.map +1 -0
- package/dist/component/metaCapi.d.ts +162 -0
- package/dist/component/metaCapi.d.ts.map +1 -0
- package/dist/component/metaCapi.js +754 -0
- package/dist/component/metaCapi.js.map +1 -0
- package/dist/component/metaFake.d.ts +5 -0
- package/dist/component/metaFake.d.ts.map +1 -0
- package/dist/component/metaFake.js +225 -0
- package/dist/component/metaFake.js.map +1 -0
- package/dist/component/metaGraph.d.ts +165 -0
- package/dist/component/metaGraph.d.ts.map +1 -0
- package/dist/component/metaGraph.js +507 -0
- package/dist/component/metaGraph.js.map +1 -0
- package/dist/component/metaSync.d.ts +186 -0
- package/dist/component/metaSync.d.ts.map +1 -0
- package/dist/component/metaSync.js +961 -0
- package/dist/component/metaSync.js.map +1 -0
- package/dist/component/pipeline.d.ts +99 -0
- package/dist/component/pipeline.d.ts.map +1 -0
- package/dist/component/pipeline.js +337 -0
- package/dist/component/pipeline.js.map +1 -0
- package/dist/component/schema.d.ts +404 -2
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +168 -2
- package/dist/component/schema.js.map +1 -1
- package/dist/component/secrets.d.ts +15 -0
- package/dist/component/secrets.d.ts.map +1 -0
- package/dist/component/secrets.js +67 -0
- package/dist/component/secrets.js.map +1 -0
- package/dist/component/validators.d.ts +1052 -15
- package/dist/component/validators.d.ts.map +1 -1
- package/dist/component/validators.js +307 -3
- package/dist/component/validators.js.map +1 -1
- package/dist/tracker/generated.d.ts +1 -1
- package/dist/tracker/generated.d.ts.map +1 -1
- package/dist/tracker/generated.js +1 -1
- package/dist/tracker/generated.js.map +1 -1
- package/dist/ui/campaigns/CampaignsView.d.ts +48 -0
- package/dist/ui/campaigns/CampaignsView.d.ts.map +1 -0
- package/dist/ui/campaigns/CampaignsView.js +47 -0
- package/dist/ui/campaigns/CampaignsView.js.map +1 -0
- package/dist/ui/campaigns/Conversions.d.ts +16 -0
- package/dist/ui/campaigns/Conversions.d.ts.map +1 -0
- package/dist/ui/campaigns/Conversions.js +40 -0
- package/dist/ui/campaigns/Conversions.js.map +1 -0
- package/dist/ui/campaigns/Drawer.d.ts +24 -0
- package/dist/ui/campaigns/Drawer.d.ts.map +1 -0
- package/dist/ui/campaigns/Drawer.js +120 -0
- package/dist/ui/campaigns/Drawer.js.map +1 -0
- package/dist/ui/campaigns/Icons.d.ts +35 -0
- package/dist/ui/campaigns/Icons.d.ts.map +1 -0
- package/dist/ui/campaigns/Icons.js +41 -0
- package/dist/ui/campaigns/Icons.js.map +1 -0
- package/dist/ui/campaigns/Summary.d.ts +21 -0
- package/dist/ui/campaigns/Summary.d.ts.map +1 -0
- package/dist/ui/campaigns/Summary.js +56 -0
- package/dist/ui/campaigns/Summary.js.map +1 -0
- package/dist/ui/campaigns/Thumbnail.d.ts +11 -0
- package/dist/ui/campaigns/Thumbnail.d.ts.map +1 -0
- package/dist/ui/campaigns/Thumbnail.js +23 -0
- package/dist/ui/campaigns/Thumbnail.js.map +1 -0
- package/dist/ui/campaigns/Tree.d.ts +12 -0
- package/dist/ui/campaigns/Tree.d.ts.map +1 -0
- package/dist/ui/campaigns/Tree.js +105 -0
- package/dist/ui/campaigns/Tree.js.map +1 -0
- package/dist/ui/campaigns/glyphs.d.ts +20 -0
- package/dist/ui/campaigns/glyphs.d.ts.map +1 -0
- package/dist/ui/campaigns/glyphs.js +19 -0
- package/dist/ui/campaigns/glyphs.js.map +1 -0
- package/dist/ui/campaigns/index.d.ts +4 -0
- package/dist/ui/campaigns/index.d.ts.map +1 -0
- package/dist/ui/campaigns/index.js +3 -0
- package/dist/ui/campaigns/index.js.map +1 -0
- package/dist/ui/campaigns/labels.d.ts +53 -0
- package/dist/ui/campaigns/labels.d.ts.map +1 -0
- package/dist/ui/campaigns/labels.js +169 -0
- package/dist/ui/campaigns/labels.js.map +1 -0
- package/dist/ui/campaigns/model.d.ts +99 -0
- package/dist/ui/campaigns/model.d.ts.map +1 -0
- package/dist/ui/campaigns/model.js +230 -0
- package/dist/ui/campaigns/model.js.map +1 -0
- package/dist/ui/campaigns/modes.d.ts +18 -0
- package/dist/ui/campaigns/modes.d.ts.map +1 -0
- package/dist/ui/campaigns/modes.js +7 -0
- package/dist/ui/campaigns/modes.js.map +1 -0
- package/dist/ui/index.d.ts +21 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +20 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/integrations/AccountPicker.d.ts +26 -0
- package/dist/ui/integrations/AccountPicker.d.ts.map +1 -0
- package/dist/ui/integrations/AccountPicker.js +101 -0
- package/dist/ui/integrations/AccountPicker.js.map +1 -0
- package/dist/ui/integrations/ClientCards.d.ts +17 -0
- package/dist/ui/integrations/ClientCards.d.ts.map +1 -0
- package/dist/ui/integrations/ClientCards.js +42 -0
- package/dist/ui/integrations/ClientCards.js.map +1 -0
- package/dist/ui/integrations/ClientsTable.d.ts +36 -0
- package/dist/ui/integrations/ClientsTable.d.ts.map +1 -0
- package/dist/ui/integrations/ClientsTable.js +143 -0
- package/dist/ui/integrations/ClientsTable.js.map +1 -0
- package/dist/ui/integrations/Connect.d.ts +35 -0
- package/dist/ui/integrations/Connect.d.ts.map +1 -0
- package/dist/ui/integrations/Connect.js +62 -0
- package/dist/ui/integrations/Connect.js.map +1 -0
- package/dist/ui/integrations/Connection.d.ts +37 -0
- package/dist/ui/integrations/Connection.d.ts.map +1 -0
- package/dist/ui/integrations/Connection.js +108 -0
- package/dist/ui/integrations/Connection.js.map +1 -0
- package/dist/ui/integrations/Dialogs.d.ts +21 -0
- package/dist/ui/integrations/Dialogs.d.ts.map +1 -0
- package/dist/ui/integrations/Dialogs.js +34 -0
- package/dist/ui/integrations/Dialogs.js.map +1 -0
- package/dist/ui/integrations/EventsFeed.d.ts +15 -0
- package/dist/ui/integrations/EventsFeed.d.ts.map +1 -0
- package/dist/ui/integrations/EventsFeed.js +61 -0
- package/dist/ui/integrations/EventsFeed.js.map +1 -0
- package/dist/ui/integrations/EventsSheet.d.ts +34 -0
- package/dist/ui/integrations/EventsSheet.d.ts.map +1 -0
- package/dist/ui/integrations/EventsSheet.js +136 -0
- package/dist/ui/integrations/EventsSheet.js.map +1 -0
- package/dist/ui/integrations/Icons.d.ts +38 -0
- package/dist/ui/integrations/Icons.d.ts.map +1 -0
- package/dist/ui/integrations/Icons.js +40 -0
- package/dist/ui/integrations/Icons.js.map +1 -0
- package/dist/ui/integrations/IntegrationsView.d.ts +15 -0
- package/dist/ui/integrations/IntegrationsView.d.ts.map +1 -0
- package/dist/ui/integrations/IntegrationsView.js +141 -0
- package/dist/ui/integrations/IntegrationsView.js.map +1 -0
- package/dist/ui/integrations/Overlay.d.ts +18 -0
- package/dist/ui/integrations/Overlay.d.ts.map +1 -0
- package/dist/ui/integrations/Overlay.js +36 -0
- package/dist/ui/integrations/Overlay.js.map +1 -0
- package/dist/ui/integrations/Partner.d.ts +14 -0
- package/dist/ui/integrations/Partner.d.ts.map +1 -0
- package/dist/ui/integrations/Partner.js +38 -0
- package/dist/ui/integrations/Partner.js.map +1 -0
- package/dist/ui/integrations/RowMenu.d.ts +15 -0
- package/dist/ui/integrations/RowMenu.d.ts.map +1 -0
- package/dist/ui/integrations/RowMenu.js +47 -0
- package/dist/ui/integrations/RowMenu.js.map +1 -0
- package/dist/ui/integrations/UnlinkDialog.d.ts +18 -0
- package/dist/ui/integrations/UnlinkDialog.d.ts.map +1 -0
- package/dist/ui/integrations/UnlinkDialog.js +29 -0
- package/dist/ui/integrations/UnlinkDialog.js.map +1 -0
- package/dist/ui/integrations/audience.d.ts +12 -0
- package/dist/ui/integrations/audience.d.ts.map +1 -0
- package/dist/ui/integrations/audience.js +12 -0
- package/dist/ui/integrations/audience.js.map +1 -0
- package/dist/ui/integrations/format.d.ts +28 -0
- package/dist/ui/integrations/format.d.ts.map +1 -0
- package/dist/ui/integrations/format.js +101 -0
- package/dist/ui/integrations/format.js.map +1 -0
- package/dist/ui/integrations/index.d.ts +5 -0
- package/dist/ui/integrations/index.d.ts.map +1 -0
- package/dist/ui/integrations/index.js +3 -0
- package/dist/ui/integrations/index.js.map +1 -0
- package/dist/ui/integrations/modal.d.ts +10 -0
- package/dist/ui/integrations/modal.d.ts.map +1 -0
- package/dist/ui/integrations/modal.js +77 -0
- package/dist/ui/integrations/modal.js.map +1 -0
- package/dist/ui/integrations/model.d.ts +99 -0
- package/dist/ui/integrations/model.d.ts.map +1 -0
- package/dist/ui/integrations/model.js +164 -0
- package/dist/ui/integrations/model.js.map +1 -0
- package/dist/ui/integrations/parts.d.ts +36 -0
- package/dist/ui/integrations/parts.d.ts.map +1 -0
- package/dist/ui/integrations/parts.js +85 -0
- package/dist/ui/integrations/parts.js.map +1 -0
- package/dist/ui/integrations/types.d.ts +146 -0
- package/dist/ui/integrations/types.d.ts.map +1 -0
- package/dist/ui/integrations/types.js +2 -0
- package/dist/ui/integrations/types.js.map +1 -0
- package/dist/ui/metrics.d.ts +106 -0
- package/dist/ui/metrics.d.ts.map +1 -0
- package/dist/ui/metrics.js +166 -0
- package/dist/ui/metrics.js.map +1 -0
- package/dist/ui/portfolio/PortfolioView.d.ts +26 -0
- package/dist/ui/portfolio/PortfolioView.d.ts.map +1 -0
- package/dist/ui/portfolio/PortfolioView.js +216 -0
- package/dist/ui/portfolio/PortfolioView.js.map +1 -0
- package/dist/ui/portfolio/SpendChart.d.ts +10 -0
- package/dist/ui/portfolio/SpendChart.d.ts.map +1 -0
- package/dist/ui/portfolio/SpendChart.js +196 -0
- package/dist/ui/portfolio/SpendChart.js.map +1 -0
- package/dist/ui/portfolio/alerts.d.ts +74 -0
- package/dist/ui/portfolio/alerts.d.ts.map +1 -0
- package/dist/ui/portfolio/alerts.js +291 -0
- package/dist/ui/portfolio/alerts.js.map +1 -0
- package/dist/ui/portfolio/figures.d.ts +79 -0
- package/dist/ui/portfolio/figures.d.ts.map +1 -0
- package/dist/ui/portfolio/figures.js +103 -0
- package/dist/ui/portfolio/figures.js.map +1 -0
- package/dist/ui/portfolio/format.d.ts +8 -0
- package/dist/ui/portfolio/format.d.ts.map +1 -0
- package/dist/ui/portfolio/format.js +28 -0
- package/dist/ui/portfolio/format.js.map +1 -0
- package/dist/ui/sample.d.ts +536 -0
- package/dist/ui/sample.d.ts.map +1 -0
- package/dist/ui/sample.js +574 -0
- package/dist/ui/sample.js.map +1 -0
- package/dist/ui/seed.d.ts +188 -0
- package/dist/ui/seed.d.ts.map +1 -0
- package/dist/ui/seed.js +563 -0
- package/dist/ui/seed.js.map +1 -0
- package/dist/ui/ui.css +3424 -0
- package/docs/federation.md +46 -1
- package/docs/meta-ads.md +795 -0
- package/docs/upgrading.md +116 -0
- package/llms.txt +3 -0
- package/package.json +15 -3
- package/src/component/_generated/api.ts +14 -0
- package/src/component/_generated/component.ts +324 -1
- package/src/component/_generated/server.ts +4 -0
- package/src/component/constants.ts +10 -0
- package/src/component/convex.config.ts +9 -0
- package/src/component/errors.ts +5 -1
- package/src/component/leads.ts +517 -17
- package/src/component/meta.ts +1525 -0
- package/src/component/metaCapi.ts +921 -0
- package/src/component/metaFake.ts +277 -0
- package/src/component/metaGraph.ts +722 -0
- package/src/component/metaSync.ts +1164 -0
- package/src/component/pipeline.ts +410 -0
- package/src/component/schema.ts +197 -1
- package/src/component/secrets.ts +98 -0
- package/src/component/validators.ts +376 -3
- package/src/tracker/generated.ts +1 -1
- package/src/ui/seed.ts +755 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { AccountPicker } from "./AccountPicker.js";
|
|
4
|
+
import { agoLabel, currencySign, pixelDigits, plural, whenLabel, zoneCity, } from "./format.js";
|
|
5
|
+
import { useBusiness } from "./audience.js";
|
|
6
|
+
import { Icon } from "./Icons.js";
|
|
7
|
+
import { suggestedAccount } from "./model.js";
|
|
8
|
+
import { Avatar, Pill, sentSummary, StateChip, TestModeNote } from "./parts.js";
|
|
9
|
+
import { RowMenu } from "./RowMenu.js";
|
|
10
|
+
/** "Escolher contas e pixels": the way back for what the login stopped releasing. */
|
|
11
|
+
export function GrantFix({ row, actions, }) {
|
|
12
|
+
if (!row.notGranted)
|
|
13
|
+
return null;
|
|
14
|
+
return (_jsx("button", { type: "button", className: "rastro-integrations__link rastro-integrations__meta rastro-integrations__grant", disabled: !actions.permitted, onClick: actions.onChooseAssets, children: "Escolher contas e pixels" }));
|
|
15
|
+
}
|
|
16
|
+
/** Accounts another owner of their site linked, by id: "uze.ai". */
|
|
17
|
+
export const ownersOf = (rows) => new Map(rows.flatMap((row) => row.account && row.accountOwner
|
|
18
|
+
? [[row.account.adAccountId, row.accountOwner]]
|
|
19
|
+
: []));
|
|
20
|
+
/** The client's other actions, the same on the table and the phone. */
|
|
21
|
+
export function rowMenuItems(row, connection, actions) {
|
|
22
|
+
const items = [];
|
|
23
|
+
if (row.pixel)
|
|
24
|
+
items.push({
|
|
25
|
+
// Another owner's pixel: its events are theirs, read here.
|
|
26
|
+
label: row.pixel.owner ? "Ver eventos" : "Configurar eventos",
|
|
27
|
+
onSelect: () => actions.onOpenEvents(row.site.siteId),
|
|
28
|
+
});
|
|
29
|
+
// What another owner (uze.ai) linked stays theirs: no swap, no unlink.
|
|
30
|
+
if (!row.pixel?.owner)
|
|
31
|
+
items.push({
|
|
32
|
+
label: row.pixel ? "Trocar pixel (plano B)" : "Pixel com token (plano B)",
|
|
33
|
+
onSelect: () => actions.onPlanB(row.site.siteId),
|
|
34
|
+
disabled: !actions.permitted,
|
|
35
|
+
});
|
|
36
|
+
if (row.account && !row.accountOwner)
|
|
37
|
+
items.push({
|
|
38
|
+
label: "Desvincular conta",
|
|
39
|
+
tone: "danger",
|
|
40
|
+
onSelect: () => actions.onUnlink(row.site.siteId),
|
|
41
|
+
disabled: !actions.permitted,
|
|
42
|
+
});
|
|
43
|
+
return items;
|
|
44
|
+
}
|
|
45
|
+
function ClientCell({ row, slot }) {
|
|
46
|
+
return (_jsxs("div", { className: "rastro-integrations__client", children: [_jsx(Avatar, { name: row.site.name, slot: slot }), _jsxs("div", { className: "rastro-integrations__client-name", children: [_jsx("strong", { title: row.site.name, children: row.site.name }), row.site.segment && (_jsx("span", { className: "rastro-integrations__meta", children: row.site.segment }))] })] }));
|
|
47
|
+
}
|
|
48
|
+
const muted = (text) => (_jsx("span", { className: "rastro-integrations__meta", children: text }));
|
|
49
|
+
/** "Ligado pelo uze.ai": what another owner of the site linked. */
|
|
50
|
+
export const OwnerNote = ({ owner }) => owner ? (_jsxs("div", { className: "rastro-integrations__meta rastro-integrations__owner", children: [_jsx(Icon, { name: "lock", size: 12 }), " Ligado pelo ", owner] })) : null;
|
|
51
|
+
const twoLines = (top, bottom, mono = false) => (_jsxs(_Fragment, { children: [_jsx("div", { className: "rastro-integrations__cell-top", children: top }), _jsx("div", { className: mono
|
|
52
|
+
? "rastro-integrations__meta rastro-integrations__mono"
|
|
53
|
+
: "rastro-integrations__meta", children: bottom })] }));
|
|
54
|
+
function SendsCell({ row, connection, actions, }) {
|
|
55
|
+
if (!connection && row.state !== "planB")
|
|
56
|
+
return muted("—");
|
|
57
|
+
if (!row.pixel)
|
|
58
|
+
return muted("sem pixel: nada é enviado");
|
|
59
|
+
const summary = sentSummary(row);
|
|
60
|
+
const test = row.testMode ? _jsx(TestModeNote, { variant: "line" }) : null;
|
|
61
|
+
if (summary)
|
|
62
|
+
return (_jsxs(_Fragment, { children: [_jsx(Pill, { tone: "ok", icon: "send", children: summary }), test] }));
|
|
63
|
+
return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "rastro-integrations__link rastro-integrations__meta", onClick: () => actions.onOpenEvents(row.site.siteId), children: "Configurar eventos" }), test] }));
|
|
64
|
+
}
|
|
65
|
+
function PixelCell({ row, connection, actions, }) {
|
|
66
|
+
if (row.pixel)
|
|
67
|
+
return (_jsxs(_Fragment, { children: [twoLines(_jsx("span", { className: "rastro-integrations__mono", children: pixelDigits(row.pixel.pixelId) }), row.pixel.name ??
|
|
68
|
+
(row.pixel.source === "token" ? "token próprio" : "")), _jsx(OwnerNote, { owner: row.pixel.owner })] }));
|
|
69
|
+
if (!connection || !actions.permitted)
|
|
70
|
+
return muted("—");
|
|
71
|
+
const items = [
|
|
72
|
+
...connection.pixels.map((pixel) => ({
|
|
73
|
+
label: `${pixel.name} · ${pixel.pixelId}`,
|
|
74
|
+
onSelect: () => actions.onSetPixel(row.site.siteId, pixel.pixelId),
|
|
75
|
+
})),
|
|
76
|
+
{
|
|
77
|
+
label: "Pixel com token próprio (plano B)",
|
|
78
|
+
onSelect: () => actions.onPlanB(row.site.siteId),
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
return (_jsx(RowMenu, { label: `Ligar pixel em ${row.site.name}`, items: items, trigger: _jsxs(_Fragment, { children: [_jsx(Icon, { name: "plus", size: 12 }), " Ligar pixel"] }) }));
|
|
82
|
+
}
|
|
83
|
+
/** B1/B3: one row per client with its account, pixel, sync and sends. */
|
|
84
|
+
function LinkedRow({ row, slot, connection, siteNames, accountOwners, actions, now, }) {
|
|
85
|
+
const [picking, setPicking] = useState(false);
|
|
86
|
+
const business = useBusiness();
|
|
87
|
+
const account = row.account;
|
|
88
|
+
return (_jsxs("tr", { "data-selected": picking ? "" : undefined, children: [_jsx("td", { children: _jsx(ClientCell, { row: row, slot: slot }) }), _jsx("td", { children: account ? (_jsxs(_Fragment, { children: [twoLines(row.accountName, account.adAccountId, true), _jsx(OwnerNote, { owner: row.accountOwner })] })) : (_jsx(AccountPicker, { siteId: row.site.siteId, siteName: row.site.name, accounts: connection?.adAccounts ?? [], siteNames: siteNames, accountOwners: accountOwners, suggestion: connection
|
|
89
|
+
? suggestedAccount(row.site, connection.adAccounts)
|
|
90
|
+
: null, disabled: !connection || !actions.permitted, onPick: (adAccountId) => actions.onPick(row.site.siteId, adAccountId), onChooseAssets: actions.onChooseAssets, onOpenChange: setPicking })) }), _jsx("td", { "data-col": "pixel", children: _jsx(PixelCell, { row: row, connection: connection, actions: actions }) }), !business && (_jsx("td", { "data-col": "currency", children: account
|
|
91
|
+
? twoLines(`${account.currency} · ${currencySign(account.currency)}`, zoneCity(account.timezone))
|
|
92
|
+
: muted("—") })), _jsxs("td", { children: [_jsx(StateChip, { row: row, now: now }), _jsx(GrantFix, { row: row, actions: actions })] }), _jsx("td", { children: _jsx(SendsCell, { row: row, connection: connection, actions: actions }) }), _jsx("td", { "data-col": "menu", children: _jsx(RowMenu, { label: `Ações de ${row.site.name}`, items: rowMenuItems(row, connection, actions) }) })] }));
|
|
93
|
+
}
|
|
94
|
+
/** B4: with the token refused, when each client last read and what waits. */
|
|
95
|
+
function StoppedRow({ row, slot, connection, actions, now, }) {
|
|
96
|
+
const account = row.account;
|
|
97
|
+
const backfill = account?.backfill;
|
|
98
|
+
return (_jsxs("tr", { children: [_jsx("td", { children: _jsx(ClientCell, { row: row, slot: slot }) }), _jsx("td", { children: account
|
|
99
|
+
? [
|
|
100
|
+
twoLines(row.accountName, account.adAccountId, true),
|
|
101
|
+
_jsx(OwnerNote, { owner: row.accountOwner }, "owner"),
|
|
102
|
+
]
|
|
103
|
+
: twoLines("Sem conta de anúncio", row.state === "planB" ? "pixel por token manual" : "—", true) }), _jsxs("td", { children: [_jsx(StateChip, { row: row, now: now }), _jsx(GrantFix, { row: row, actions: actions })] }), _jsx("td", { children: !account
|
|
104
|
+
? muted(row.state === "planB" ? "não lê gasto" : "—")
|
|
105
|
+
: account.syncState === "backfill" && backfill
|
|
106
|
+
? twoLines(backfill.done > 0
|
|
107
|
+
? `${backfill.done} de ${backfill.total} blocos lidos`
|
|
108
|
+
: "backfill no começo", "retoma de onde parou")
|
|
109
|
+
: account.lastSyncAt
|
|
110
|
+
? twoLines(whenLabel(account.lastSyncAt, now), agoLabel(account.lastSyncAt, now))
|
|
111
|
+
: muted("ainda não leu") }), _jsx("td", { children: row.state === "planB" ? (_jsx(Pill, { tone: "ok", icon: "send", children: "enviando normal" })) : !row.pixel ? (muted("sem pixel")) : row.pending > 0 ? (_jsx(Pill, { tone: "warn", icon: "clock", children: plural(row.pending, "venda esperando", "vendas esperando") })) : (muted("nada na fila")) }), _jsx("td", { "data-col": "menu", children: _jsx(RowMenu, { label: `Ações de ${row.site.name}`, items: rowMenuItems(row, connection, actions) }) })] }));
|
|
112
|
+
}
|
|
113
|
+
/** The Clientes card: B1 (waiting for Meta), B3 (linked) and B4 (stopped). */
|
|
114
|
+
export function ClientsTable({ rows, connection, filter, onFilter, actions, now, }) {
|
|
115
|
+
const business = useBusiness();
|
|
116
|
+
const refused = connection?.status === "invalid";
|
|
117
|
+
const attention = rows.filter((row) => row.attention).length;
|
|
118
|
+
const shown = !business && filter === "attention"
|
|
119
|
+
? rows.filter((r) => r.attention)
|
|
120
|
+
: rows;
|
|
121
|
+
const siteNames = new Map(rows.map((row) => [row.site.siteId, row.site.name]));
|
|
122
|
+
const slots = new Map(rows.map((row, index) => [row.site.siteId, index]));
|
|
123
|
+
const since = connection?.invalidSince
|
|
124
|
+
? whenLabel(connection.invalidSince, now).replace(/^hoje /, "")
|
|
125
|
+
: null;
|
|
126
|
+
const company = rows[0];
|
|
127
|
+
const description = refused
|
|
128
|
+
? `Os números${since ? ` até ${since}` : ""} continuam valendo; nada é apagado enquanto o token está recusado`
|
|
129
|
+
: business && company
|
|
130
|
+
? company.accountOwner
|
|
131
|
+
? `Ligada pelo ${company.accountOwner}: o gasto dela já entra nas Campanhas da ${company.site.name}`
|
|
132
|
+
: !connection
|
|
133
|
+
? "Depois de conectar, a conta de anúncio da empresa aparece aqui"
|
|
134
|
+
: company.account
|
|
135
|
+
? `O gasto desta conta entra nas Campanhas da ${company.site.name}`
|
|
136
|
+
: `Escolha a conta de anúncio da ${company.site.name}: o gasto dela entra nas Campanhas`
|
|
137
|
+
: !connection
|
|
138
|
+
? "Depois de conectar, cada cliente ganha a sua conta de anúncio aqui"
|
|
139
|
+
: "Uma conta de anúncio por cliente: o gasto dela é só daquele cliente";
|
|
140
|
+
const who = business ? "Empresa" : "Cliente";
|
|
141
|
+
return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__clients", "data-offline": connection ? undefined : "", "aria-labelledby": "rastro-integrations-clients", children: [_jsxs("header", { className: "rastro-integrations__clients-head", children: [_jsxs("div", { children: [_jsx("h3", { id: "rastro-integrations-clients", className: "rastro-integrations__title", children: business ? "Sua conta de anúncio" : "Clientes" }), _jsx("p", { className: "rastro-integrations__desc", children: description })] }), connection && !business && (_jsxs("div", { className: "rastro-integrations__seg", role: "group", "aria-label": "Filtrar clientes", children: [_jsxs("button", { type: "button", "aria-pressed": filter === "all", onClick: () => onFilter("all"), children: ["Todos ", rows.length] }), _jsxs("button", { type: "button", "aria-pressed": filter === "attention", onClick: () => onFilter("attention"), children: ["Precisa de aten\u00E7\u00E3o ", attention] })] }))] }), _jsxs("table", { className: "rastro-integrations__table", "data-mode": refused ? "stopped" : "linked", children: [_jsx("thead", { children: refused ? (_jsxs("tr", { children: [_jsx("th", { scope: "col", children: who }), _jsx("th", { scope: "col", children: "Conta de an\u00FAncio" }), _jsx("th", { scope: "col", children: "Estado" }), _jsx("th", { scope: "col", children: "\u00DAltimo gasto lido" }), _jsx("th", { scope: "col", children: "Vendas na fila" }), _jsx("th", { scope: "col", "data-col": "menu", children: _jsx("span", { className: "rastro-integrations__sr", children: "A\u00E7\u00F5es" }) })] })) : (_jsxs("tr", { children: [_jsx("th", { scope: "col", children: who }), _jsx("th", { scope: "col", children: "Conta de an\u00FAncio" }), _jsx("th", { scope: "col", "data-col": "pixel", children: "Pixel" }), !business && (_jsx("th", { scope: "col", "data-col": "currency", children: "Moeda \u00B7 fuso" })), _jsx("th", { scope: "col", children: "Estado" }), _jsx("th", { scope: "col", children: "Vendas de volta \u00E0 Meta" }), _jsx("th", { scope: "col", "data-col": "menu", children: _jsx("span", { className: "rastro-integrations__sr", children: "A\u00E7\u00F5es" }) })] })) }), _jsx("tbody", { children: shown.map((row) => refused && connection ? (_jsx(StoppedRow, { row: row, slot: slots.get(row.site.siteId) ?? 0, connection: connection, actions: actions, now: now }, row.site.siteId)) : (_jsx(LinkedRow, { row: row, slot: slots.get(row.site.siteId) ?? 0, connection: connection, siteNames: siteNames, accountOwners: ownersOf(rows), actions: actions, now: now }, row.site.siteId))) })] }), shown.length === 0 && (_jsx("p", { className: "rastro-empty", children: "Nenhum cliente precisa de aten\u00E7\u00E3o agora." }))] }));
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=ClientsTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientsTable.js","sourceRoot":"","sources":["../../../src/ui/integrations/ClientsTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { IntegrationSite, PixelChoice } from "./types.js";
|
|
2
|
+
/** The Meta-blue Facebook button, in its two sizes. */
|
|
3
|
+
export declare function FacebookButton({ label, size, disabled, onClick, }: {
|
|
4
|
+
label: string;
|
|
5
|
+
size?: "md" | "lg";
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
onClick: () => void;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
9
|
+
/**
|
|
10
|
+
* B1, left: one Facebook login for every client, or (business) the company's
|
|
11
|
+
* own login for its account and pixel.
|
|
12
|
+
*/
|
|
13
|
+
export declare function ConnectCard({ permitted, busy, onConnect, companyName, productName, }: {
|
|
14
|
+
permitted: boolean;
|
|
15
|
+
busy: boolean;
|
|
16
|
+
onConnect: () => void;
|
|
17
|
+
/** Business: "Conecte a Meta da Zezinho Pneus". */
|
|
18
|
+
companyName?: string | null;
|
|
19
|
+
productName?: string;
|
|
20
|
+
}): import("react").JSX.Element;
|
|
21
|
+
/**
|
|
22
|
+
* Plan B: a client whose account the agency cannot reach still sends sales,
|
|
23
|
+
* with its own pixel and Conversions API token. Sends; reads no spend.
|
|
24
|
+
*/
|
|
25
|
+
export declare function PlanBForm({ sites, initialSiteId, permitted, busy, onSubmit, framed, }: {
|
|
26
|
+
sites: readonly IntegrationSite[];
|
|
27
|
+
initialSiteId?: string;
|
|
28
|
+
permitted: boolean;
|
|
29
|
+
busy: boolean;
|
|
30
|
+
onSubmit: (siteId: string, pixel: PixelChoice) => void;
|
|
31
|
+
/** False inside a dialog that already draws the frame and the title. */
|
|
32
|
+
framed?: boolean;
|
|
33
|
+
}): import("react").JSX.Element;
|
|
34
|
+
export declare function PlanBIntro(): import("react").JSX.Element;
|
|
35
|
+
//# sourceMappingURL=Connect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connect.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/Connect.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAW,EACX,QAAQ,EACR,OAAO,GACR,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAcA;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,IAAI,EACJ,SAAS,EACT,WAAkB,EAClB,WAAsB,GACvB,EAAE;IACD,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,+BAqDA;AAID;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,aAAa,EACb,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,MAAa,GACd,EAAE;IACD,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvD,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,+BAwHA;AAED,wBAAgB,UAAU,gCAYzB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useState } from "react";
|
|
3
|
+
import { useBusiness } from "./audience.js";
|
|
4
|
+
import { FacebookMark, Icon, MetaMark } from "./Icons.js";
|
|
5
|
+
import { Avatar } from "./parts.js";
|
|
6
|
+
/** The Meta-blue Facebook button, in its two sizes. */
|
|
7
|
+
export function FacebookButton({ label, size = "md", disabled, onClick, }) {
|
|
8
|
+
return (_jsxs("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "facebook", "data-size": size, disabled: disabled, onClick: onClick, children: [_jsx(FacebookMark, { size: 16 }), label] }));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* B1, left: one Facebook login for every client, or (business) the company's
|
|
12
|
+
* own login for its account and pixel.
|
|
13
|
+
*/
|
|
14
|
+
export function ConnectCard({ permitted, busy, onConnect, companyName = null, productName = "Rastro", }) {
|
|
15
|
+
const business = useBusiness();
|
|
16
|
+
return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__connect", "aria-labelledby": "rastro-integrations-connect", children: [_jsx("span", { className: "rastro-integrations__tile", "data-size": "lg", children: _jsx(MetaMark, { size: 30 }) }), _jsxs("div", { children: [_jsx("h3", { id: "rastro-integrations-connect", className: "rastro-integrations__title", "data-size": "lg", children: business
|
|
17
|
+
? `Conecte a Meta da ${companyName ?? "empresa"}`
|
|
18
|
+
: "Conecte a Meta da agência" }), _jsx("p", { className: "rastro-integrations__desc rastro-integrations__lede", children: business
|
|
19
|
+
? `Entre com o Facebook de quem administra os anúncios. Você escolhe na Meta a conta de anúncio e o pixel; o ${productName} lê o gasto e devolve as vendas.`
|
|
20
|
+
: "Um login só para todos os clientes. Você escolhe na Meta quais contas de anúncio e pixels o Rastro pode ler; depois liga cada cliente à conta dele." })] }), _jsxs("ul", { className: "rastro-integrations__perks", children: [_jsxs("li", { children: [_jsx(Icon, { name: "check", size: 14 }), " Gasto de 90 dias por an\u00FAncio, e depois a cada 45 min"] }), _jsxs("li", { children: [_jsx(Icon, { name: "check", size: 14 }), " Vendas do WhatsApp devolvidas ao pixel como Compra, com valor"] }), _jsxs("li", { children: [_jsx(Icon, { name: "lock", size: 14 }), " S\u00F3 leitura de an\u00FAncios. O token fica cifrado e nunca aparece na tela"] })] }), _jsxs("div", { className: "rastro-integrations__connect-action", children: [_jsx(FacebookButton, { label: "Conectar com Facebook", size: "lg", disabled: !permitted || busy, onClick: onConnect }), _jsx("span", { className: "rastro-integrations__meta", children: "Abre a janela da Meta \u00B7 Login do Facebook para Empresas" })] })] }));
|
|
21
|
+
}
|
|
22
|
+
const PIXEL_ID = /^\d{6,20}$/;
|
|
23
|
+
/**
|
|
24
|
+
* Plan B: a client whose account the agency cannot reach still sends sales,
|
|
25
|
+
* with its own pixel and Conversions API token. Sends; reads no spend.
|
|
26
|
+
*/
|
|
27
|
+
export function PlanBForm({ sites, initialSiteId, permitted, busy, onSubmit, framed = true, }) {
|
|
28
|
+
const id = useId();
|
|
29
|
+
const business = useBusiness();
|
|
30
|
+
const [siteId, setSiteId] = useState(initialSiteId ?? sites.at(-1)?.siteId ?? "");
|
|
31
|
+
const [pixelId, setPixelId] = useState("");
|
|
32
|
+
const [token, setToken] = useState("");
|
|
33
|
+
const [touched, setTouched] = useState(false);
|
|
34
|
+
const pixelValid = PIXEL_ID.test(pixelId.replace(/\s/g, ""));
|
|
35
|
+
const valid = Boolean(siteId) && pixelValid && token.trim().length > 20;
|
|
36
|
+
const slot = Math.max(0, sites.findIndex((site) => site.siteId === siteId));
|
|
37
|
+
const site = sites[slot];
|
|
38
|
+
const submit = (event) => {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
setTouched(true);
|
|
41
|
+
if (!valid)
|
|
42
|
+
return;
|
|
43
|
+
onSubmit(siteId, {
|
|
44
|
+
pixelId: pixelId.replace(/\s/g, ""),
|
|
45
|
+
accessToken: token.trim(),
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
const fields = (_jsxs(_Fragment, { children: [_jsxs("div", { className: "rastro-integrations__field", children: [_jsx("label", { htmlFor: `${id}-site`, children: business ? "Empresa" : "Cliente" }), _jsxs("span", { className: "rastro-integrations__select", "data-avatar": "", children: [site && _jsx(Avatar, { name: site.name, slot: slot, size: "sm" }), _jsx("select", { id: `${id}-site`, value: siteId, disabled: !permitted, onChange: (event) => setSiteId(event.target.value), children: sites.map((option) => (_jsx("option", { value: option.siteId, children: option.name }, option.siteId))) }), _jsx(Icon, { name: "chevronDown", size: 14 })] })] }), _jsxs("div", { className: "rastro-integrations__field", children: [_jsx("label", { htmlFor: `${id}-pixel`, children: "ID do pixel" }), _jsx("input", { id: `${id}-pixel`, className: "rastro-integrations__input", "data-mono": "", inputMode: "numeric", autoComplete: "off", placeholder: "ex.: 3309887120465510", value: pixelId, disabled: !permitted, "aria-invalid": touched && !pixelValid ? true : undefined, onChange: (event) => setPixelId(event.target.value) })] }), _jsxs("div", { className: "rastro-integrations__field", children: [_jsx("label", { htmlFor: `${id}-token`, children: "Token da API de Convers\u00F5es" }), _jsxs("span", { className: "rastro-integrations__input", "data-icon": "", children: [_jsx(Icon, { name: "key", size: 14 }), _jsx("input", { id: `${id}-token`, type: "password", autoComplete: "off", placeholder: "Cole o token. Ele \u00E9 cifrado e n\u00E3o volta a aparecer", value: token, disabled: !permitted, onChange: (event) => setToken(event.target.value) })] })] }), touched && !valid && (_jsx("p", { className: "rastro-integrations__hint", role: "alert", children: pixelValid
|
|
49
|
+
? "Cole o token inteiro que o Gerenciador de Eventos gerou."
|
|
50
|
+
: "O ID do pixel tem só números, como no Gerenciador de Eventos." })), _jsx("div", { className: "rastro-integrations__form-foot", children: _jsx("button", { type: "submit", className: "rastro-integrations__btn", "data-variant": "outline", disabled: !permitted || busy, children: busy ? "Testando…" : "Testar e salvar" }) })] }));
|
|
51
|
+
if (!framed) {
|
|
52
|
+
return (_jsx("form", { className: "rastro-integrations__planb-form", onSubmit: submit, children: fields }));
|
|
53
|
+
}
|
|
54
|
+
return (_jsxs("form", { className: "rastro-integrations__card rastro-integrations__planb", "aria-labelledby": `${id}-title`, onSubmit: submit, children: [_jsxs("div", { className: "rastro-integrations__row-gap", children: [_jsx("h3", { id: `${id}-title`, className: "rastro-integrations__title", children: "Sem login: pixel + token" }), _jsx("span", { className: "rastro-integrations__pill", "data-tone": "ghost", children: "plano B" })] }), _jsx(PlanBIntro, {}), fields] }));
|
|
55
|
+
}
|
|
56
|
+
export function PlanBIntro() {
|
|
57
|
+
const business = useBusiness();
|
|
58
|
+
return (_jsxs("p", { className: "rastro-integrations__desc", children: [business
|
|
59
|
+
? "Sem acesso de administrador na Meta?"
|
|
60
|
+
: "Para um cliente cuja conta a agência não acessa.", " ", "Gere o token em", " ", _jsx("b", { children: "Gerenciador de Eventos \u2192 Configura\u00E7\u00F5es \u2192 API de Convers\u00F5es" }), ". Envia vendas; n\u00E3o l\u00EA gasto."] }));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=Connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connect.js","sourceRoot":"","sources":["../../../src/ui/integrations/Connect.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ClientRow } from "./model.js";
|
|
2
|
+
import type { MetaConnection } from "./types.js";
|
|
3
|
+
/** B3/B4 header: whose login, what it reaches, and what to do with it. */
|
|
4
|
+
export declare function ConnectionCard({ connection, permitted, busy, onChooseAssets, onDisconnect, onReconnect, }: {
|
|
5
|
+
connection: MetaConnection;
|
|
6
|
+
permitted: boolean;
|
|
7
|
+
busy: boolean;
|
|
8
|
+
onChooseAssets: () => void;
|
|
9
|
+
onDisconnect: () => void;
|
|
10
|
+
onReconnect: () => void;
|
|
11
|
+
}): import("react").JSX.Element;
|
|
12
|
+
/** The phone's connection line (M1): one card, the gear opens the choices. */
|
|
13
|
+
export declare function ConnectionLine({ connection, permitted, onChooseAssets, }: {
|
|
14
|
+
connection: MetaConnection;
|
|
15
|
+
permitted: boolean;
|
|
16
|
+
onChooseAssets: () => void;
|
|
17
|
+
}): import("react").JSX.Element;
|
|
18
|
+
/** The token's expiry, when Meta says it is near: reconnect before it stops. */
|
|
19
|
+
export declare function ExpiryWarning({ connection, permitted, busy, now, onReconnect, }: {
|
|
20
|
+
connection: MetaConnection;
|
|
21
|
+
permitted: boolean;
|
|
22
|
+
busy: boolean;
|
|
23
|
+
now: number;
|
|
24
|
+
onReconnect: () => void;
|
|
25
|
+
}): import("react").JSX.Element | null;
|
|
26
|
+
/** B4/M3: the refused token, said once, with what stopped and since when. */
|
|
27
|
+
export declare function RefusedBanner({ connection, rows, phone, }: {
|
|
28
|
+
connection: MetaConnection;
|
|
29
|
+
rows: readonly ClientRow[];
|
|
30
|
+
phone?: boolean;
|
|
31
|
+
}): import("react").JSX.Element;
|
|
32
|
+
/** B4, bottom: what reconnecting brings back, in three steps. */
|
|
33
|
+
export declare function ReconnectPlan({ connection, rows, }: {
|
|
34
|
+
connection: MetaConnection;
|
|
35
|
+
rows: readonly ClientRow[];
|
|
36
|
+
}): import("react").JSX.Element;
|
|
37
|
+
//# sourceMappingURL=Connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connection.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/Connection.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,SAAS,EACT,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,+BAiFA;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,SAAS,EACT,cAAc,GACf,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,+BA8BA;AAID,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,SAAS,EACT,IAAI,EACJ,GAAG,EACH,WAAW,GACZ,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,sCA+BA;AAOD,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,IAAI,EACJ,KAAa,GACd,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,+BAuDA;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,IAAI,GACL,EAAE;IACD,UAAU,EAAE,cAAc,CAAC;IAC3B,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;CAC5B,+BA6DA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useBusiness } from "./audience.js";
|
|
3
|
+
import { FacebookButton } from "./Connect.js";
|
|
4
|
+
import { clockLabel, dayLabel, plural } from "./format.js";
|
|
5
|
+
import { backfillStep, errorCode } from "./model.js";
|
|
6
|
+
import { Icon, MetaMark } from "./Icons.js";
|
|
7
|
+
import { Pill } from "./parts.js";
|
|
8
|
+
const businessTitle = (connection) => connection.businessName ? `Meta · ${connection.businessName}` : "Meta";
|
|
9
|
+
/** B3/B4 header: whose login, what it reaches, and what to do with it. */
|
|
10
|
+
export function ConnectionCard({ connection, permitted, busy, onChooseAssets, onDisconnect, onReconnect, }) {
|
|
11
|
+
const refused = connection.status === "invalid";
|
|
12
|
+
const accounts = connection.adAccounts.length;
|
|
13
|
+
const pixels = connection.pixels.length;
|
|
14
|
+
const when = connection.authorizedAt
|
|
15
|
+
? ` em ${dayLabel(connection.authorizedAt)}`
|
|
16
|
+
: "";
|
|
17
|
+
const who = connection.authorizedBy?.name
|
|
18
|
+
? `${connection.authorizedBy.name} autorizou${when}`
|
|
19
|
+
: connection.authorizedAt
|
|
20
|
+
? `Autorizada${when}`
|
|
21
|
+
: "Token colado à mão";
|
|
22
|
+
return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__conn", "aria-label": "Conex\u00E3o com a Meta", children: [_jsx("span", { className: "rastro-integrations__tile", children: _jsx(MetaMark, { size: 26 }) }), _jsxs("div", { className: "rastro-integrations__conn-body", children: [_jsxs("div", { className: "rastro-integrations__row-gap", "data-gap": "10", children: [_jsx("h3", { className: "rastro-integrations__title", children: businessTitle(connection) }), refused ? (_jsx(Pill, { tone: "bad", icon: "alert", children: "Token recusado pela Meta" })) : (_jsx(Pill, { tone: "ok", icon: "dot", children: "Conectada" }))] }), _jsxs("div", { className: "rastro-integrations__conn-line", children: [_jsxs("span", { children: [who, " \u00B7 ", plural(accounts, "conta de anúncio", "contas de anúncio"), " ", "\u00B7 ", plural(pixels, "pixel", "pixels")] }), _jsxs("span", { className: "rastro-integrations__meta", children: [_jsx(Icon, { name: "lock", size: 12 }), " token cifrado no servidor, nunca exibido"] })] })] }), _jsx("div", { className: "rastro-integrations__conn-actions", children: refused ? (_jsx(FacebookButton, { label: "Reconectar com Facebook", disabled: !permitted || busy, onClick: onReconnect })) : (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "outline", "data-size": "sm", disabled: !permitted || busy, onClick: onChooseAssets, children: [_jsx(Icon, { name: "settings", size: 14 }), "Escolher contas e pixels"] }), _jsx("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "ghost", "data-size": "sm", disabled: !permitted || busy, onClick: onDisconnect, children: "Desconectar" })] })) })] }));
|
|
23
|
+
}
|
|
24
|
+
/** The phone's connection line (M1): one card, the gear opens the choices. */
|
|
25
|
+
export function ConnectionLine({ connection, permitted, onChooseAssets, }) {
|
|
26
|
+
return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__conn-phone", "aria-label": "Conex\u00E3o com a Meta", children: [_jsx("span", { className: "rastro-integrations__tile", "data-size": "sm", children: _jsx(MetaMark, { size: 20 }) }), _jsxs("div", { className: "rastro-integrations__grow", children: [_jsx("h3", { className: "rastro-integrations__title", children: businessTitle(connection) }), _jsxs("span", { className: "rastro-integrations__meta", children: [plural(connection.adAccounts.length, "conta", "contas"), " \u00B7", " ", plural(connection.pixels.length, "pixel", "pixels"), " \u00B7", " ", _jsx(Icon, { name: "lock", size: 12 }), " token cifrado"] })] }), _jsx("button", { type: "button", className: "rastro-integrations__icon-btn", "aria-label": "Escolher contas e pixels", disabled: !permitted, onClick: onChooseAssets, children: _jsx(Icon, { name: "settings" }) })] }));
|
|
27
|
+
}
|
|
28
|
+
const DAY_MS = 86_400_000;
|
|
29
|
+
/** The token's expiry, when Meta says it is near: reconnect before it stops. */
|
|
30
|
+
export function ExpiryWarning({ connection, permitted, busy, now, onReconnect, }) {
|
|
31
|
+
const business = useBusiness();
|
|
32
|
+
// A short-lived login Meta would not trade for a long-lived one expires
|
|
33
|
+
// just the same: the same warning, without a count.
|
|
34
|
+
const exchangeFailed = errorCode(connection.lastError) === "TOKEN_EXCHANGE_FAILED";
|
|
35
|
+
if (connection.status !== "active")
|
|
36
|
+
return null;
|
|
37
|
+
if (!connection.expiringSoon && !exchangeFailed)
|
|
38
|
+
return null;
|
|
39
|
+
const days = connection.expiresAt
|
|
40
|
+
? Math.max(0, Math.ceil((connection.expiresAt - now) / DAY_MS))
|
|
41
|
+
: null;
|
|
42
|
+
return (_jsxs("div", { className: "rastro-integrations__callout", "data-tone": "warn", role: "note", children: [_jsx(Icon, { name: "clock", size: 14 }), _jsxs("p", { children: [days === null
|
|
43
|
+
? "O acesso da Meta expira em breve."
|
|
44
|
+
: days === 0
|
|
45
|
+
? "O acesso da Meta expira hoje."
|
|
46
|
+
: `O acesso expira em ${plural(days, "dia", "dias")}.`, " ", business
|
|
47
|
+
? "Reconectar mantém a conta e o pixel ligados à empresa."
|
|
48
|
+
: "Reconectar mantém as contas e os pixels ligados aos mesmos clientes."] }), _jsx(FacebookButton, { label: "Reconectar", disabled: !permitted || busy, onClick: onReconnect })] }));
|
|
49
|
+
}
|
|
50
|
+
const stoppedRows = (rows) => rows.filter((row) => row.state === "stopped");
|
|
51
|
+
const queued = (rows) => stoppedRows(rows).reduce((sum, row) => sum + row.pending, 0);
|
|
52
|
+
/** B4/M3: the refused token, said once, with what stopped and since when. */
|
|
53
|
+
export function RefusedBanner({ connection, rows, phone = false, }) {
|
|
54
|
+
const business = useBusiness();
|
|
55
|
+
const stopped = stoppedRows(rows).length;
|
|
56
|
+
const since = connection.invalidSince
|
|
57
|
+
? clockLabel(connection.invalidSince)
|
|
58
|
+
: null;
|
|
59
|
+
const pending = queued(rows);
|
|
60
|
+
const code = connection.lastError ?? "META_TOKEN_INVALID";
|
|
61
|
+
if (phone) {
|
|
62
|
+
return (_jsxs("div", { className: "rastro-integrations__callout", "data-tone": "bad", "data-stack": "", children: [_jsxs("strong", { className: "rastro-integrations__row-gap", "data-gap": "8", children: [_jsx(Icon, { name: "alert", size: 14 }), " A Meta recusou o token"] }), _jsxs("span", { children: [business
|
|
63
|
+
? "O gasto parou"
|
|
64
|
+
: `O gasto de ${plural(stopped, "cliente", "clientes")} parou`, since ? ` às ${since}` : "", pending > 0
|
|
65
|
+
? ` e ${plural(pending, "venda espera", "vendas esperam")} na fila`
|
|
66
|
+
: "", ". Nada foi apagado."] }), _jsx("code", { className: "rastro-integrations__code", children: code })] }));
|
|
67
|
+
}
|
|
68
|
+
return (_jsxs("div", { className: "rastro-integrations__callout", "data-tone": "bad", "data-size": "lg", role: "alert", children: [_jsx(Icon, { name: "alert", size: 20 }), _jsxs("p", { children: [_jsxs("b", { children: ["A Meta recusou o token da ", business ? "empresa" : "agência", "."] }), " O gasto", " ", business
|
|
69
|
+
? "da conta de anúncio"
|
|
70
|
+
: stopped === 1
|
|
71
|
+
? "do cliente"
|
|
72
|
+
: `dos ${stopped} clientes`, " ", "parou de atualizar", since ? ` às ${since}` : "", " e as vendas ficam na fila at\u00E9 reconectar. Causa prov\u00E1vel: a senha do Facebook de quem conectou mudou, ou o acesso ao app foi removido no Business.", " ", _jsx("code", { className: "rastro-integrations__code", children: code })] })] }));
|
|
73
|
+
}
|
|
74
|
+
/** B4, bottom: what reconnecting brings back, in three steps. */
|
|
75
|
+
export function ReconnectPlan({ connection, rows, }) {
|
|
76
|
+
const business = useBusiness();
|
|
77
|
+
const since = connection.invalidSince
|
|
78
|
+
? clockLabel(connection.invalidSince)
|
|
79
|
+
: null;
|
|
80
|
+
const resuming = stoppedRows(rows).find((row) => row.account?.syncState === "backfill" && row.account.backfill);
|
|
81
|
+
const resumingStep = backfillStep(resuming?.account?.backfill);
|
|
82
|
+
const pending = queued(rows);
|
|
83
|
+
const steps = [
|
|
84
|
+
[
|
|
85
|
+
"refresh",
|
|
86
|
+
"O mesmo login volta a valer",
|
|
87
|
+
business
|
|
88
|
+
? "A conta e o pixel que você já escolheu continuam ligados à empresa."
|
|
89
|
+
: "As contas e os pixels que você já escolheu continuam ligados aos mesmos clientes.",
|
|
90
|
+
],
|
|
91
|
+
[
|
|
92
|
+
"clock",
|
|
93
|
+
"O gasto parado é relido",
|
|
94
|
+
`Cada conta relê ${since ? `desde ${since}` : "de onde parou"}${resumingStep
|
|
95
|
+
? `; a ${resuming.site.name} retoma o bloco ${resumingStep.current} de ${resumingStep.total} de onde parou`
|
|
96
|
+
: ""}.`,
|
|
97
|
+
],
|
|
98
|
+
[
|
|
99
|
+
"send",
|
|
100
|
+
pending > 0
|
|
101
|
+
? `As ${plural(pending, "venda", "vendas")} da fila saem`.replace("As 1 venda", "A venda")
|
|
102
|
+
: "Os próximos eventos saem",
|
|
103
|
+
"Eventos com até 7 dias ainda valem para a Meta; nenhum é perdido hoje.",
|
|
104
|
+
],
|
|
105
|
+
];
|
|
106
|
+
return (_jsxs("section", { className: "rastro-integrations__card rastro-integrations__plan", "aria-labelledby": "rastro-integrations-plan", children: [_jsx("h3", { id: "rastro-integrations-plan", className: "rastro-integrations__title", children: "Ao reconectar" }), _jsx("ol", { className: "rastro-integrations__steps", children: steps.map(([icon, title, text]) => (_jsxs("li", { children: [_jsx("span", { className: "rastro-integrations__step-icon", children: _jsx(Icon, { name: icon, size: 14 }) }), _jsxs("div", { children: [_jsx("strong", { children: title }), _jsx("p", { className: "rastro-integrations__desc", children: text })] })] }, title))) })] }));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=Connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connection.js","sourceRoot":"","sources":["../../../src/ui/integrations/Connection.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAE3D,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGlC,MAAM,aAAa,GAAG,CAAC,UAA0B,EAAE,EAAE,CACnD,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAEzE,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,EAC7B,UAAU,EACV,SAAS,EACT,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,WAAW,GAQZ;IACC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC;IAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IACxC,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY;QAClC,CAAC,CAAC,OAAO,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;QAC5C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,EAAE,IAAI;QACvC,CAAC,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,aAAa,IAAI,EAAE;QACpD,CAAC,CAAC,UAAU,CAAC,YAAY;YACvB,CAAC,CAAC,aAAa,IAAI,EAAE;YACrB,CAAC,CAAC,oBAAoB,CAAC;IAC3B,OAAO,CACL,mBACE,SAAS,EAAC,qDAAqD,gBACpD,yBAAoB,aAE/B,eAAM,SAAS,EAAC,2BAA2B,YACzC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,GACjB,EACP,eAAK,SAAS,EAAC,gCAAgC,aAC7C,eAAK,SAAS,EAAC,8BAA8B,cAAU,IAAI,aACzD,aAAI,SAAS,EAAC,4BAA4B,YACvC,aAAa,CAAC,UAAU,CAAC,GACvB,EACJ,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,IAAI,IAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,OAAO,yCAEtB,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,0BAEnB,CACR,IACG,EACN,eAAK,SAAS,EAAC,gCAAgC,aAC7C,2BACG,GAAG,cAAK,MAAM,CAAC,QAAQ,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,EAAE,GAAG,aACpE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,IAC/B,EACP,gBAAM,SAAS,EAAC,2BAA2B,aACzC,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,EAAE,GAAI,iDAEzB,IACH,IACF,EACN,cAAK,SAAS,EAAC,mCAAmC,YAC/C,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,cAAc,IACb,KAAK,EAAC,yBAAyB,EAC/B,QAAQ,EAAE,CAAC,SAAS,IAAI,IAAI,EAC5B,OAAO,EAAE,WAAW,GACpB,CACH,CAAC,CAAC,CAAC,CACF,8BACE,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0BAA0B,kBACvB,SAAS,eACZ,IAAI,EACd,QAAQ,EAAE,CAAC,SAAS,IAAI,IAAI,EAC5B,OAAO,EAAE,cAAc,aAEvB,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,EAAC,IAAI,EAAE,EAAE,GAAI,gCAE3B,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0BAA0B,kBACvB,OAAO,eACV,IAAI,EACd,QAAQ,EAAE,CAAC,SAAS,IAAI,IAAI,EAC5B,OAAO,EAAE,YAAY,4BAGd,IACR,CACJ,GACG,IACE,CACX,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,EAC7B,UAAU,EACV,SAAS,EACT,cAAc,GAKf;IACC,OAAO,CACL,mBACE,SAAS,EAAC,2DAA2D,gBAC1D,yBAAoB,aAE/B,eAAM,SAAS,EAAC,2BAA2B,eAAW,IAAI,YACxD,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,GACjB,EACP,eAAK,SAAS,EAAC,2BAA2B,aACxC,aAAI,SAAS,EAAC,4BAA4B,YACvC,aAAa,CAAC,UAAU,CAAC,GACvB,EACL,gBAAM,SAAS,EAAC,2BAA2B,aACxC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,aAAI,GAAG,EAC9D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,aAAI,GAAG,EAC3D,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAE,EAAE,GAAI,sBACzB,IACH,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+BAA+B,gBAC9B,0BAA0B,EACrC,QAAQ,EAAE,CAAC,SAAS,EACpB,OAAO,EAAE,cAAc,YAEvB,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,GAAG,GACjB,IACD,CACX,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,EAC5B,UAAU,EACV,SAAS,EACT,IAAI,EACJ,GAAG,EACH,WAAW,GAOZ;IACC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,wEAAwE;IACxE,oDAAoD;IACpD,MAAM,cAAc,GAClB,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,uBAAuB,CAAC;IAC9D,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS;QAC/B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC/D,CAAC,CAAC,IAAI,CAAC;IACT,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,eAAW,MAAM,EAAC,IAAI,EAAC,MAAM,aACxE,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAE,EAAE,GAAI,EAC/B,wBACG,IAAI,KAAK,IAAI;wBACZ,CAAC,CAAC,mCAAmC;wBACrC,CAAC,CAAC,IAAI,KAAK,CAAC;4BACV,CAAC,CAAC,+BAA+B;4BACjC,CAAC,CAAC,sBAAsB,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAC9D,QAAQ;wBACP,CAAC,CAAC,wDAAwD;wBAC1D,CAAC,CAAC,sEAAsE,IACxE,EACJ,KAAC,cAAc,IACb,KAAK,EAAC,YAAY,EAClB,QAAQ,EAAE,CAAC,SAAS,IAAI,IAAI,EAC5B,OAAO,EAAE,WAAW,GACpB,IACE,CACP,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,IAA0B,EAAE,EAAE,CACjD,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAChD,MAAM,MAAM,GAAG,CAAC,IAA0B,EAAE,EAAE,CAC5C,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAE/D,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,EAC5B,UAAU,EACV,IAAI,EACJ,KAAK,GAAG,KAAK,GAKd;IACC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY;QACnC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,IAAI,oBAAoB,CAAC;IAC1D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,eACE,SAAS,EAAC,8BAA8B,eAC9B,KAAK,gBACJ,EAAE,aAEb,kBAAQ,SAAS,EAAC,8BAA8B,cAAU,GAAG,aAC3D,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAE,EAAE,GAAI,+BACxB,EACT,2BACG,QAAQ;4BACP,CAAC,CAAC,eAAe;4BACjB,CAAC,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,QAAQ,EAC/D,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAC3B,OAAO,GAAG,CAAC;4BACV,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,CAAC,UAAU;4BACnE,CAAC,CAAC,EAAE,2BAED,EACP,eAAM,SAAS,EAAC,2BAA2B,YAAE,IAAI,GAAQ,IACrD,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,eACE,SAAS,EAAC,8BAA8B,eAC9B,KAAK,eACL,IAAI,EACd,IAAI,EAAC,OAAO,aAEZ,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAE,EAAE,GAAI,EAC/B,wBACE,sDAA8B,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,SAAM,cAC9D,GAAG,EACR,QAAQ;wBACP,CAAC,CAAC,qBAAqB;wBACvB,CAAC,CAAC,OAAO,KAAK,CAAC;4BACb,CAAC,CAAC,YAAY;4BACd,CAAC,CAAC,OAAO,OAAO,WAAW,EAAE,GAAG,wBACjB,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,mKAEe,GAAG,EAChE,eAAM,SAAS,EAAC,2BAA2B,YAAE,IAAI,GAAQ,IACvD,IACA,CACP,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,aAAa,CAAC,EAC5B,UAAU,EACV,IAAI,GAIL;IACC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY;QACnC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CACrC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CACvE,CAAC;IACF,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAsC;QAC/C;YACE,SAAS;YACT,6BAA6B;YAC7B,QAAQ;gBACN,CAAC,CAAC,qEAAqE;gBACvE,CAAC,CAAC,mFAAmF;SACxF;QACD;YACE,OAAO;YACP,yBAAyB;YACzB,mBAAmB,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,eAAe,GAC3D,YAAY;gBACV,CAAC,CAAC,OAAO,QAAS,CAAC,IAAI,CAAC,IAAI,mBAAmB,YAAY,CAAC,OAAO,OAAO,YAAY,CAAC,KAAK,gBAAgB;gBAC5G,CAAC,CAAC,EACN,GAAG;SACJ;QACD;YACE,MAAM;YACN,OAAO,GAAG,CAAC;gBACT,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,OAAO,CAC7D,YAAY,EACZ,SAAS,CACV;gBACH,CAAC,CAAC,0BAA0B;YAC9B,wEAAwE;SACzE;KACF,CAAC;IACF,OAAO,CACL,mBACE,SAAS,EAAC,qDAAqD,qBAC/C,0BAA0B,aAE1C,aAAI,EAAE,EAAC,0BAA0B,EAAC,SAAS,EAAC,4BAA4B,8BAEnE,EACL,aAAI,SAAS,EAAC,4BAA4B,YACvC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAClC,yBACE,eAAM,SAAS,EAAC,gCAAgC,YAC9C,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAI,GACzB,EACP,0BACE,2BAAS,KAAK,GAAU,EACxB,YAAG,SAAS,EAAC,2BAA2B,YAAE,IAAI,GAAK,IAC/C,KAPC,KAAK,CAQT,CACN,CAAC,GACC,IACG,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { IntegrationSite, PixelChoice } from "./types.js";
|
|
2
|
+
/** Plan B once the agency is connected: the same form, in a dialog. */
|
|
3
|
+
export declare function PlanBDialog({ sites, siteId, permitted, busy, onSubmit, onClose, }: {
|
|
4
|
+
sites: readonly IntegrationSite[];
|
|
5
|
+
siteId: string;
|
|
6
|
+
permitted: boolean;
|
|
7
|
+
busy: boolean;
|
|
8
|
+
onSubmit: (siteId: string, pixel: PixelChoice) => void;
|
|
9
|
+
onClose: () => void;
|
|
10
|
+
}): import("react").JSX.Element;
|
|
11
|
+
/**
|
|
12
|
+
* Disconnecting stops every client's spend and every pixel the owner linked,
|
|
13
|
+
* its own-token ones too; it asks once, plainly.
|
|
14
|
+
*/
|
|
15
|
+
export declare function DisconnectDialog({ linked, busy, onConfirm, onClose, }: {
|
|
16
|
+
linked: number;
|
|
17
|
+
busy: boolean;
|
|
18
|
+
onConfirm: () => void;
|
|
19
|
+
onClose: () => void;
|
|
20
|
+
}): import("react").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=Dialogs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialogs.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/Dialogs.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,OAAO,GACR,EAAE;IACD,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BA2CA;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,SAAS,EACT,OAAO,GACR,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAgEA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useRef } from "react";
|
|
3
|
+
import { useBusiness } from "./audience.js";
|
|
4
|
+
import { PlanBForm, PlanBIntro } from "./Connect.js";
|
|
5
|
+
import { Icon } from "./Icons.js";
|
|
6
|
+
import { Overlay } from "./Overlay.js";
|
|
7
|
+
/** Plan B once the agency is connected: the same form, in a dialog. */
|
|
8
|
+
export function PlanBDialog({ sites, siteId, permitted, busy, onSubmit, onClose, }) {
|
|
9
|
+
const id = useId();
|
|
10
|
+
return (_jsx(Overlay, { labelledBy: `${id}-title`, onClose: onClose, children: _jsxs("div", { className: "rastro-integrations__dialog", children: [_jsxs("div", { className: "rastro-integrations__dialog-head", children: [_jsxs("div", { className: "rastro-integrations__grow", children: [_jsxs("div", { className: "rastro-integrations__row-gap", children: [_jsx("h3", { id: `${id}-title`, className: "rastro-integrations__dialog-title", children: "Sem login: pixel + token" }), _jsx("span", { className: "rastro-integrations__pill", "data-tone": "ghost", children: "plano B" })] }), _jsx(PlanBIntro, {})] }), _jsx("button", { type: "button", className: "rastro-integrations__icon-btn", "aria-label": "Fechar", onClick: onClose, children: _jsx(Icon, { name: "x" }) })] }), _jsx(PlanBForm, { sites: sites, initialSiteId: siteId, permitted: permitted, busy: busy, framed: false, onSubmit: (target, pixel) => {
|
|
11
|
+
onSubmit(target, pixel);
|
|
12
|
+
onClose();
|
|
13
|
+
} })] }) }));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Disconnecting stops every client's spend and every pixel the owner linked,
|
|
17
|
+
* its own-token ones too; it asks once, plainly.
|
|
18
|
+
*/
|
|
19
|
+
export function DisconnectDialog({ linked, busy, onConfirm, onClose, }) {
|
|
20
|
+
const id = useId();
|
|
21
|
+
const business = useBusiness();
|
|
22
|
+
const cancel = useRef(null);
|
|
23
|
+
return (_jsx(Overlay, { role: "alertdialog", labelledBy: `${id}-title`, describedBy: `${id}-desc`, initialFocus: cancel, onClose: onClose, children: _jsxs("div", { className: "rastro-integrations__dialog", children: [_jsxs("div", { className: "rastro-integrations__dialog-head", children: [_jsx("span", { className: "rastro-integrations__danger-tile", children: _jsx(Icon, { name: "unlink", size: 20 }) }), _jsxs("div", { children: [_jsxs("h3", { id: `${id}-title`, className: "rastro-integrations__dialog-title", children: ["Desconectar a Meta da ", business ? "empresa" : "agência", "?"] }), _jsx("p", { id: `${id}-desc`, className: "rastro-integrations__desc rastro-integrations__lede", children: business
|
|
24
|
+
? linked > 0
|
|
25
|
+
? "O gasto da conta para de atualizar e as vendas param de sair para o pixel. O token é apagado."
|
|
26
|
+
: "O token é apagado e as vendas param de sair para o pixel que você ligou."
|
|
27
|
+
: linked > 0
|
|
28
|
+
? `O gasto de ${linked === 1 ? "1 cliente para" : `${linked} clientes param`} de atualizar e as vendas param de sair dos pixels que você ligou, inclusive os de token próprio (plano B). O token é apagado.`
|
|
29
|
+
: "O token é apagado, e os pixels que você ligou, inclusive os de token próprio (plano B), param de enviar." })] })] }), _jsxs("div", { className: "rastro-integrations__dialog-foot", children: [_jsx("button", { ref: cancel, type: "button", className: "rastro-integrations__btn", "data-variant": "outline", onClick: onClose, children: "Cancelar" }), _jsx("button", { type: "button", className: "rastro-integrations__btn", "data-variant": "danger", disabled: busy, onClick: () => {
|
|
30
|
+
onConfirm();
|
|
31
|
+
onClose();
|
|
32
|
+
}, children: "Desconectar" })] })] }) }));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=Dialogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialogs.js","sourceRoot":"","sources":["../../../src/ui/integrations/Dialogs.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,uEAAuE;AACvE,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,OAAO,GAQR;IACC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,OAAO,CACL,KAAC,OAAO,IAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,YAClD,eAAK,SAAS,EAAC,6BAA6B,aAC1C,eAAK,SAAS,EAAC,kCAAkC,aAC/C,eAAK,SAAS,EAAC,2BAA2B,aACxC,eAAK,SAAS,EAAC,8BAA8B,aAC3C,aACE,EAAE,EAAE,GAAG,EAAE,QAAQ,EACjB,SAAS,EAAC,mCAAmC,yCAG1C,EACL,eAAM,SAAS,EAAC,2BAA2B,eAAW,OAAO,wBAEtD,IACH,EACN,KAAC,UAAU,KAAG,IACV,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+BAA+B,gBAC9B,QAAQ,EACnB,OAAO,EAAE,OAAO,YAEhB,KAAC,IAAI,IAAC,IAAI,EAAC,GAAG,GAAG,GACV,IACL,EACN,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,KAAK,EACb,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;wBAC1B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;wBACxB,OAAO,EAAE,CAAC;oBACZ,CAAC,GACD,IACE,GACE,CACX,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,SAAS,EACT,OAAO,GAMR;IACC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAC/C,OAAO,CACL,KAAC,OAAO,IACN,IAAI,EAAC,aAAa,EAClB,UAAU,EAAE,GAAG,EAAE,QAAQ,EACzB,WAAW,EAAE,GAAG,EAAE,OAAO,EACzB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,YAEhB,eAAK,SAAS,EAAC,6BAA6B,aAC1C,eAAK,SAAS,EAAC,kCAAkC,aAC/C,eAAM,SAAS,EAAC,kCAAkC,YAChD,KAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAE,EAAE,GAAI,GAC3B,EACP,0BACE,cACE,EAAE,EAAE,GAAG,EAAE,QAAQ,EACjB,SAAS,EAAC,mCAAmC,uCAEtB,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,SACpD,EACL,YACE,EAAE,EAAE,GAAG,EAAE,OAAO,EAChB,SAAS,EAAC,qDAAqD,YAE9D,QAAQ;wCACP,CAAC,CAAC,MAAM,GAAG,CAAC;4CACV,CAAC,CAAC,+FAA+F;4CACjG,CAAC,CAAC,0EAA0E;wCAC9E,CAAC,CAAC,MAAM,GAAG,CAAC;4CACV,CAAC,CAAC,cAAc,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,iBAAiB,gIAAgI;4CAC5M,CAAC,CAAC,0GAA0G,GAC9G,IACA,IACF,EACN,eAAK,SAAS,EAAC,kCAAkC,aAC/C,iBACE,GAAG,EAAE,MAAM,EACX,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0BAA0B,kBACvB,SAAS,EACtB,OAAO,EAAE,OAAO,yBAGT,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0BAA0B,kBACvB,QAAQ,EACrB,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,GAAG,EAAE;gCACZ,SAAS,EAAE,CAAC;gCACZ,OAAO,EAAE,CAAC;4BACZ,CAAC,4BAGM,IACL,IACF,GACE,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IntegrationConversion, IntegrationSite, MetaEventName, SentCounts } from "./types.js";
|
|
2
|
+
/** What each Meta event is called on screen. */
|
|
3
|
+
export declare const EVENT_LABELS: Record<MetaEventName, string>;
|
|
4
|
+
/** "enviada há 18 min", "enviado há 41 min", "na fila", "falhou". */
|
|
5
|
+
export declare function deliveryLabel(event: IntegrationConversion, now: number): string;
|
|
6
|
+
/** B3, bottom: the latest events every client's pixel received. */
|
|
7
|
+
export declare function EventsFeed({ sites, conversions, adNames, sentBySite, currency, now, }: {
|
|
8
|
+
sites: readonly IntegrationSite[];
|
|
9
|
+
conversions: Record<string, readonly IntegrationConversion[]>;
|
|
10
|
+
adNames: Record<string, string> | undefined;
|
|
11
|
+
sentBySite: Record<string, SentCounts> | undefined;
|
|
12
|
+
currency: string;
|
|
13
|
+
now: number;
|
|
14
|
+
}): import("react").JSX.Element | null;
|
|
15
|
+
//# sourceMappingURL=EventsFeed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventsFeed.d.ts","sourceRoot":"","sources":["../../../src/ui/integrations/EventsFeed.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,gDAAgD;AAChD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKtD,CAAC;AAGF,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,UAKtE;AAMD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,OAAO,EACP,UAAU,EACV,QAAQ,EACR,GAAG,GACJ,EAAE;IACD,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC,CAAC;IAC9D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,sCA2FA"}
|