@greatapps/common 1.1.596 → 1.1.598
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/dist/components/embeds/FrillEmbed.mjs +17 -1
- package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
- package/dist/components/navigation/subcomponents/BottomLinks.mjs +9 -3
- package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/embeds/FrillEmbed.tsx +17 -1
- package/src/components/navigation/subcomponents/BottomLinks.tsx +10 -2
|
@@ -13,8 +13,9 @@ const PROFILE_LABELS = {
|
|
|
13
13
|
const FRILL_SCRIPT_URL = "https://widget.frill.co/v2/container.js";
|
|
14
14
|
const FRILL_KEY = "2f77f232-a120-438e-8ef6-01912ffd1b99";
|
|
15
15
|
const SURVEYS = [{ key: "7f59dbf6-b665-458a-80e2-778de47efe1c" }];
|
|
16
|
+
const NOVIDADES_WIDGET_KEY = "4a5ba13b-1150-49fe-aa15-f9a2da0ba909";
|
|
16
17
|
const WIDGETS = [
|
|
17
|
-
{ key:
|
|
18
|
+
{ key: NOVIDADES_WIDGET_KEY },
|
|
18
19
|
{ key: "720c0912-e6a4-495c-835e-3ff1f59d6dfc" }
|
|
19
20
|
];
|
|
20
21
|
function initFrillLoader() {
|
|
@@ -63,12 +64,14 @@ function FrillEmbed() {
|
|
|
63
64
|
const { whitelabel } = useWhitelabel();
|
|
64
65
|
const { data: subscriptionData } = useActiveSubscription();
|
|
65
66
|
const containerRef = useRef(null);
|
|
67
|
+
const novidadesWidgetRef = useRef(null);
|
|
66
68
|
const isMainWhitelabel = useIsDefaultWhitelabel();
|
|
67
69
|
const subscription = subscriptionData?.data?.[0] ?? null;
|
|
68
70
|
const isV4 = whitelabel?.id === V4_WHITELABEL_ID;
|
|
69
71
|
useEffect(() => {
|
|
70
72
|
if (!user || !isMainWhitelabel && !isV4) return;
|
|
71
73
|
let containerPromise = null;
|
|
74
|
+
let novidadesWidgetPromise = null;
|
|
72
75
|
try {
|
|
73
76
|
initFrillLoader();
|
|
74
77
|
if (document.readyState === "complete" || document.readyState === "interactive") {
|
|
@@ -94,14 +97,27 @@ function FrillEmbed() {
|
|
|
94
97
|
win.Frill("identify", userData);
|
|
95
98
|
containerPromise.then((widget) => {
|
|
96
99
|
containerRef.current = widget;
|
|
100
|
+
window.__frillContainer = widget;
|
|
97
101
|
}).catch(() => {
|
|
98
102
|
});
|
|
103
|
+
if (!isV4) {
|
|
104
|
+
novidadesWidgetPromise = win.Frill("widget", { key: NOVIDADES_WIDGET_KEY });
|
|
105
|
+
novidadesWidgetPromise.then((widget) => {
|
|
106
|
+
novidadesWidgetRef.current = widget;
|
|
107
|
+
window.__frillNovidadesWidget = widget;
|
|
108
|
+
}).catch(() => {
|
|
109
|
+
});
|
|
110
|
+
}
|
|
99
111
|
} catch {
|
|
100
112
|
}
|
|
101
113
|
return () => {
|
|
102
114
|
try {
|
|
103
115
|
containerPromise?.destroy();
|
|
116
|
+
novidadesWidgetPromise?.destroy();
|
|
104
117
|
containerRef.current = null;
|
|
118
|
+
novidadesWidgetRef.current = null;
|
|
119
|
+
window.__frillContainer = null;
|
|
120
|
+
window.__frillNovidadesWidget = null;
|
|
105
121
|
document.removeEventListener("DOMContentLoaded", loadFrillScript);
|
|
106
122
|
} catch {
|
|
107
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/embeds/FrillEmbed.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { useAuth } from '../../providers/auth.provider';\nimport { useIsDefaultWhitelabel, useWhitelabel } from '../../providers/whitelabel.provider';\nimport { useActiveSubscription } from '../../modules/subscriptions/hooks/find-active-subscription.hook';\n\nconst V4_WHITELABEL_ID = 367568;\n\nconst PROFILE_LABELS: Record<string, string> = {\n owner: 'Proprietário',\n admin: 'Administrador',\n editor: 'Colaborador',\n viewer: 'Visualizador',\n};\n\nconst FRILL_SCRIPT_URL = 'https://widget.frill.co/v2/container.js';\nconst FRILL_KEY = '2f77f232-a120-438e-8ef6-01912ffd1b99';\n\nconst SURVEYS = [{ key: '7f59dbf6-b665-458a-80e2-778de47efe1c' }];\nconst
|
|
1
|
+
{"version":3,"sources":["../../../src/components/embeds/FrillEmbed.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { useAuth } from '../../providers/auth.provider';\nimport { useIsDefaultWhitelabel, useWhitelabel } from '../../providers/whitelabel.provider';\nimport { useActiveSubscription } from '../../modules/subscriptions/hooks/find-active-subscription.hook';\n\nconst V4_WHITELABEL_ID = 367568;\n\nconst PROFILE_LABELS: Record<string, string> = {\n owner: 'Proprietário',\n admin: 'Administrador',\n editor: 'Colaborador',\n viewer: 'Visualizador',\n};\n\nconst FRILL_SCRIPT_URL = 'https://widget.frill.co/v2/container.js';\nconst FRILL_KEY = '2f77f232-a120-438e-8ef6-01912ffd1b99';\n\nconst SURVEYS = [{ key: '7f59dbf6-b665-458a-80e2-778de47efe1c' }];\nconst NOVIDADES_WIDGET_KEY = '4a5ba13b-1150-49fe-aa15-f9a2da0ba909';\nconst WIDGETS = [\n { key: NOVIDADES_WIDGET_KEY },\n { key: '720c0912-e6a4-495c-835e-3ff1f59d6dfc' },\n];\n\nfunction initFrillLoader() {\n try {\n const win = window as any;\n if (win.Frill) return;\n\n let counter = 0;\n const queue: Record<number, any> = {};\n\n win.Frill = function (action: string, params: any) {\n let instance: any;\n const id = counter++;\n const promise: any = new Promise((resolve, reject) => {\n queue[id] = {\n params: [action, params],\n resolve: (f: any) => {\n instance = f;\n resolve(f);\n },\n reject,\n };\n });\n promise.destroy = () => {\n delete queue[id];\n instance?.destroy();\n };\n return promise;\n };\n win.Frill.q = queue;\n } catch {}\n}\n\nfunction loadFrillScript() {\n try {\n if (document.querySelector(`script[src=\"${FRILL_SCRIPT_URL}\"]`)) return;\n const anchor = document.getElementsByTagName('script')[0];\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.src = FRILL_SCRIPT_URL;\n anchor?.parentNode?.insertBefore(script, anchor);\n } catch {}\n}\n\nexport function FrillEmbed() {\n const { user } = useAuth();\n const { whitelabel } = useWhitelabel();\n const { data: subscriptionData } = useActiveSubscription();\n const containerRef = useRef<any>(null);\n const novidadesWidgetRef = useRef<any>(null);\n\n const isMainWhitelabel = useIsDefaultWhitelabel();\n const subscription = subscriptionData?.data?.[0] ?? null;\n const isV4 = whitelabel?.id === V4_WHITELABEL_ID;\n\n useEffect(() => {\n if (!user || (!isMainWhitelabel && !isV4)) return;\n\n let containerPromise: any = null;\n let novidadesWidgetPromise: any = null;\n\n try {\n initFrillLoader();\n\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n loadFrillScript();\n } else {\n document.addEventListener('DOMContentLoaded', loadFrillScript);\n }\n\n const userData: Record<string, any> = {\n id: String(user.id ?? ''),\n };\n if (user.email) userData.email = user.email;\n if (user.name || user.last_name) {\n userData.name = `${user.name ?? ''} ${user.last_name ?? ''}`.trim();\n }\n userData.attributes = isV4\n ? { company: 'V4' }\n : { profile: PROFILE_LABELS[user.profile ?? ''] ?? user.profile ?? '', plan: subscription?.plan_name ?? '' };\n\n const config: Record<string, any> = { key: FRILL_KEY, user: userData };\n if (!isV4) {\n config.surveys = SURVEYS;\n config.widgets = WIDGETS;\n }\n\n const win = window as any;\n containerPromise = win.Frill('container', config);\n win.Frill('identify', userData);\n\n containerPromise.then((widget: any) => {\n containerRef.current = widget;\n (window as any).__frillContainer = widget;\n }).catch(() => {});\n\n if (!isV4) {\n novidadesWidgetPromise = win.Frill('widget', { key: NOVIDADES_WIDGET_KEY });\n novidadesWidgetPromise.then((widget: any) => {\n novidadesWidgetRef.current = widget;\n (window as any).__frillNovidadesWidget = widget;\n }).catch(() => {});\n }\n } catch {}\n\n return () => {\n try {\n // Destroy via promise — handles both pending and resolved containers\n containerPromise?.destroy();\n novidadesWidgetPromise?.destroy();\n containerRef.current = null;\n novidadesWidgetRef.current = null;\n (window as any).__frillContainer = null;\n (window as any).__frillNovidadesWidget = null;\n document.removeEventListener('DOMContentLoaded', loadFrillScript);\n } catch {}\n };\n }, [user, isMainWhitelabel, isV4, subscription?.plan_name]);\n\n return null;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { IconHelp, IconBulb,
|
|
3
|
+
import { IconHelp, IconBulb, IconStar } from "@tabler/icons-react";
|
|
4
4
|
import { useIsDefaultWhitelabel, useWhitelabel } from "../../../providers/whitelabel.provider";
|
|
5
|
+
function openFrillWidget() {
|
|
6
|
+
const widget = window.__frillNovidadesWidget;
|
|
7
|
+
widget?.open?.();
|
|
8
|
+
}
|
|
5
9
|
function BottomLinks() {
|
|
6
10
|
const { whitelabel } = useWhitelabel();
|
|
7
11
|
const isMainWhitelabel = useIsDefaultWhitelabel();
|
|
@@ -10,8 +14,9 @@ function BottomLinks() {
|
|
|
10
14
|
...isMainWhitelabel ? [
|
|
11
15
|
{
|
|
12
16
|
label: "Novidades",
|
|
13
|
-
icon:
|
|
14
|
-
className: "novidades"
|
|
17
|
+
icon: IconStar,
|
|
18
|
+
className: "novidades",
|
|
19
|
+
onClick: openFrillWidget
|
|
15
20
|
}
|
|
16
21
|
] : [],
|
|
17
22
|
{
|
|
@@ -46,6 +51,7 @@ function BottomLinks() {
|
|
|
46
51
|
"button",
|
|
47
52
|
{
|
|
48
53
|
type: "button",
|
|
54
|
+
onClick: link.onClick,
|
|
49
55
|
className: `${baseClassName} text-left${link.className ? ` ${link.className}` : ""}`,
|
|
50
56
|
children: [
|
|
51
57
|
/* @__PURE__ */ jsx(link.icon, { size: 20, className: "text-gray-400" }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/navigation/subcomponents/BottomLinks.tsx"],"sourcesContent":["'use client';\n\nimport { IconHelp, IconBulb,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/navigation/subcomponents/BottomLinks.tsx"],"sourcesContent":["'use client';\n\nimport { IconHelp, IconBulb, IconStar, type TablerIcon } from '@tabler/icons-react';\nimport { useIsDefaultWhitelabel, useWhitelabel } from '../../../providers/whitelabel.provider';\n\ninterface BottomLink {\n label: string;\n icon: TablerIcon;\n href?: string;\n className?: string;\n onClick?: () => void;\n}\n\nfunction openFrillWidget() {\n const widget = (window as unknown as { __frillNovidadesWidget?: { open?: () => void } }).__frillNovidadesWidget;\n widget?.open?.();\n}\n\nexport function BottomLinks() {\n const { whitelabel } = useWhitelabel();\n const isMainWhitelabel = useIsDefaultWhitelabel();\n\n const helpUrl = whitelabel?.url_help || 'https://ajuda.greatsoftwares.com.br/pt-br/';\n\n const links: BottomLink[] = [\n ...(isMainWhitelabel\n ? [\n {\n label: 'Novidades',\n icon: IconStar,\n className: 'novidades',\n onClick: openFrillWidget,\n },\n ]\n : []),\n {\n label: 'Central de ajuda',\n icon: IconHelp,\n href: helpUrl,\n },\n ...(isMainWhitelabel\n ? [\n {\n label: 'Enviar sugestões',\n icon: IconBulb,\n href: 'https://ideias.greatpages.com.br/b/y0geg1ve/feature-ideas',\n },\n ]\n : []),\n ];\n\n const baseClassName =\n 'rounded-md flex items-center gap-2 p-3 cursor-pointer transition-colors no-underline bg-white hover:bg-gray-100 active:bg-gray-50';\n\n return (\n <div className=\"flex flex-col\">\n {links.map((link) =>\n link.href ? (\n <a\n key={link.label}\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`${baseClassName}${link.className ? ` ${link.className}` : ''}`}\n >\n <link.icon size={20} className=\"text-gray-400\" />\n <span className=\"paragraph-small-medium text-gray-500\">{link.label}</span>\n </a>\n ) : (\n <button\n key={link.label}\n type=\"button\"\n onClick={link.onClick}\n className={`${baseClassName} text-left${link.className ? ` ${link.className}` : ''}`}\n >\n <link.icon size={20} className=\"text-gray-400\" />\n <span className=\"paragraph-small-medium text-gray-500\">{link.label}</span>\n </button>\n )\n )}\n </div>\n );\n}\n"],"mappings":";AA0DU,SAOE,KAPF;AAxDV,SAAS,UAAU,UAAU,gBAAiC;AAC9D,SAAS,wBAAwB,qBAAqB;AAUtD,SAAS,kBAAkB;AACzB,QAAM,SAAU,OAAyE;AACzF,UAAQ,OAAO;AACjB;AAEO,SAAS,cAAc;AAC5B,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,mBAAmB,uBAAuB;AAEhD,QAAM,UAAU,YAAY,YAAY;AAExC,QAAM,QAAsB;AAAA,IAC1B,GAAI,mBACA;AAAA,MACE;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,IACF,IACA,CAAC;AAAA,IACL;AAAA,MACE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,IACA,GAAI,mBACA;AAAA,MACE;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF,IACA,CAAC;AAAA,EACP;AAEA,QAAM,gBACJ;AAEF,SACE,oBAAC,SAAI,WAAU,iBACZ,gBAAM;AAAA,IAAI,CAAC,SACV,KAAK,OACH;AAAA,MAAC;AAAA;AAAA,QAEC,MAAM,KAAK;AAAA,QACX,QAAO;AAAA,QACP,KAAI;AAAA,QACJ,WAAW,GAAG,aAAa,GAAG,KAAK,YAAY,IAAI,KAAK,SAAS,KAAK,EAAE;AAAA,QAExE;AAAA,8BAAC,KAAK,MAAL,EAAU,MAAM,IAAI,WAAU,iBAAgB;AAAA,UAC/C,oBAAC,UAAK,WAAU,wCAAwC,eAAK,OAAM;AAAA;AAAA;AAAA,MAP9D,KAAK;AAAA,IAQZ,IAEA;AAAA,MAAC;AAAA;AAAA,QAEC,MAAK;AAAA,QACL,SAAS,KAAK;AAAA,QACd,WAAW,GAAG,aAAa,aAAa,KAAK,YAAY,IAAI,KAAK,SAAS,KAAK,EAAE;AAAA,QAElF;AAAA,8BAAC,KAAK,MAAL,EAAU,MAAM,IAAI,WAAU,iBAAgB;AAAA,UAC/C,oBAAC,UAAK,WAAU,wCAAwC,eAAK,OAAM;AAAA;AAAA;AAAA,MAN9D,KAAK;AAAA,IAOZ;AAAA,EAEJ,GACF;AAEJ;","names":[]}
|
package/package.json
CHANGED
|
@@ -18,8 +18,9 @@ const FRILL_SCRIPT_URL = 'https://widget.frill.co/v2/container.js';
|
|
|
18
18
|
const FRILL_KEY = '2f77f232-a120-438e-8ef6-01912ffd1b99';
|
|
19
19
|
|
|
20
20
|
const SURVEYS = [{ key: '7f59dbf6-b665-458a-80e2-778de47efe1c' }];
|
|
21
|
+
const NOVIDADES_WIDGET_KEY = '4a5ba13b-1150-49fe-aa15-f9a2da0ba909';
|
|
21
22
|
const WIDGETS = [
|
|
22
|
-
{ key:
|
|
23
|
+
{ key: NOVIDADES_WIDGET_KEY },
|
|
23
24
|
{ key: '720c0912-e6a4-495c-835e-3ff1f59d6dfc' },
|
|
24
25
|
];
|
|
25
26
|
|
|
@@ -71,6 +72,7 @@ export function FrillEmbed() {
|
|
|
71
72
|
const { whitelabel } = useWhitelabel();
|
|
72
73
|
const { data: subscriptionData } = useActiveSubscription();
|
|
73
74
|
const containerRef = useRef<any>(null);
|
|
75
|
+
const novidadesWidgetRef = useRef<any>(null);
|
|
74
76
|
|
|
75
77
|
const isMainWhitelabel = useIsDefaultWhitelabel();
|
|
76
78
|
const subscription = subscriptionData?.data?.[0] ?? null;
|
|
@@ -80,6 +82,7 @@ export function FrillEmbed() {
|
|
|
80
82
|
if (!user || (!isMainWhitelabel && !isV4)) return;
|
|
81
83
|
|
|
82
84
|
let containerPromise: any = null;
|
|
85
|
+
let novidadesWidgetPromise: any = null;
|
|
83
86
|
|
|
84
87
|
try {
|
|
85
88
|
initFrillLoader();
|
|
@@ -113,14 +116,27 @@ export function FrillEmbed() {
|
|
|
113
116
|
|
|
114
117
|
containerPromise.then((widget: any) => {
|
|
115
118
|
containerRef.current = widget;
|
|
119
|
+
(window as any).__frillContainer = widget;
|
|
116
120
|
}).catch(() => {});
|
|
121
|
+
|
|
122
|
+
if (!isV4) {
|
|
123
|
+
novidadesWidgetPromise = win.Frill('widget', { key: NOVIDADES_WIDGET_KEY });
|
|
124
|
+
novidadesWidgetPromise.then((widget: any) => {
|
|
125
|
+
novidadesWidgetRef.current = widget;
|
|
126
|
+
(window as any).__frillNovidadesWidget = widget;
|
|
127
|
+
}).catch(() => {});
|
|
128
|
+
}
|
|
117
129
|
} catch {}
|
|
118
130
|
|
|
119
131
|
return () => {
|
|
120
132
|
try {
|
|
121
133
|
// Destroy via promise — handles both pending and resolved containers
|
|
122
134
|
containerPromise?.destroy();
|
|
135
|
+
novidadesWidgetPromise?.destroy();
|
|
123
136
|
containerRef.current = null;
|
|
137
|
+
novidadesWidgetRef.current = null;
|
|
138
|
+
(window as any).__frillContainer = null;
|
|
139
|
+
(window as any).__frillNovidadesWidget = null;
|
|
124
140
|
document.removeEventListener('DOMContentLoaded', loadFrillScript);
|
|
125
141
|
} catch {}
|
|
126
142
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { IconHelp, IconBulb,
|
|
3
|
+
import { IconHelp, IconBulb, IconStar, type TablerIcon } from '@tabler/icons-react';
|
|
4
4
|
import { useIsDefaultWhitelabel, useWhitelabel } from '../../../providers/whitelabel.provider';
|
|
5
5
|
|
|
6
6
|
interface BottomLink {
|
|
@@ -8,6 +8,12 @@ interface BottomLink {
|
|
|
8
8
|
icon: TablerIcon;
|
|
9
9
|
href?: string;
|
|
10
10
|
className?: string;
|
|
11
|
+
onClick?: () => void;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function openFrillWidget() {
|
|
15
|
+
const widget = (window as unknown as { __frillNovidadesWidget?: { open?: () => void } }).__frillNovidadesWidget;
|
|
16
|
+
widget?.open?.();
|
|
11
17
|
}
|
|
12
18
|
|
|
13
19
|
export function BottomLinks() {
|
|
@@ -21,8 +27,9 @@ export function BottomLinks() {
|
|
|
21
27
|
? [
|
|
22
28
|
{
|
|
23
29
|
label: 'Novidades',
|
|
24
|
-
icon:
|
|
30
|
+
icon: IconStar,
|
|
25
31
|
className: 'novidades',
|
|
32
|
+
onClick: openFrillWidget,
|
|
26
33
|
},
|
|
27
34
|
]
|
|
28
35
|
: []),
|
|
@@ -63,6 +70,7 @@ export function BottomLinks() {
|
|
|
63
70
|
<button
|
|
64
71
|
key={link.label}
|
|
65
72
|
type="button"
|
|
73
|
+
onClick={link.onClick}
|
|
66
74
|
className={`${baseClassName} text-left${link.className ? ` ${link.className}` : ''}`}
|
|
67
75
|
>
|
|
68
76
|
<link.icon size={20} className="text-gray-400" />
|