@greatapps/common 1.1.597 → 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 +15 -1
- package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
- package/dist/components/navigation/subcomponents/BottomLinks.mjs +2 -2
- package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/embeds/FrillEmbed.tsx +15 -1
- package/src/components/navigation/subcomponents/BottomLinks.tsx +2 -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") {
|
|
@@ -97,13 +100,24 @@ function FrillEmbed() {
|
|
|
97
100
|
window.__frillContainer = widget;
|
|
98
101
|
}).catch(() => {
|
|
99
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
|
+
}
|
|
100
111
|
} catch {
|
|
101
112
|
}
|
|
102
113
|
return () => {
|
|
103
114
|
try {
|
|
104
115
|
containerPromise?.destroy();
|
|
116
|
+
novidadesWidgetPromise?.destroy();
|
|
105
117
|
containerRef.current = null;
|
|
118
|
+
novidadesWidgetRef.current = null;
|
|
106
119
|
window.__frillContainer = null;
|
|
120
|
+
window.__frillNovidadesWidget = null;
|
|
107
121
|
document.removeEventListener("DOMContentLoaded", loadFrillScript);
|
|
108
122
|
} catch {
|
|
109
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":[]}
|
|
@@ -3,8 +3,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { IconHelp, IconBulb, IconStar } from "@tabler/icons-react";
|
|
4
4
|
import { useIsDefaultWhitelabel, useWhitelabel } from "../../../providers/whitelabel.provider";
|
|
5
5
|
function openFrillWidget() {
|
|
6
|
-
const
|
|
7
|
-
|
|
6
|
+
const widget = window.__frillNovidadesWidget;
|
|
7
|
+
widget?.open?.();
|
|
8
8
|
}
|
|
9
9
|
function BottomLinks() {
|
|
10
10
|
const { whitelabel } = useWhitelabel();
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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();
|
|
@@ -115,14 +118,25 @@ export function FrillEmbed() {
|
|
|
115
118
|
containerRef.current = widget;
|
|
116
119
|
(window as any).__frillContainer = widget;
|
|
117
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
|
+
}
|
|
118
129
|
} catch {}
|
|
119
130
|
|
|
120
131
|
return () => {
|
|
121
132
|
try {
|
|
122
133
|
// Destroy via promise — handles both pending and resolved containers
|
|
123
134
|
containerPromise?.destroy();
|
|
135
|
+
novidadesWidgetPromise?.destroy();
|
|
124
136
|
containerRef.current = null;
|
|
137
|
+
novidadesWidgetRef.current = null;
|
|
125
138
|
(window as any).__frillContainer = null;
|
|
139
|
+
(window as any).__frillNovidadesWidget = null;
|
|
126
140
|
document.removeEventListener('DOMContentLoaded', loadFrillScript);
|
|
127
141
|
} catch {}
|
|
128
142
|
};
|
|
@@ -12,8 +12,8 @@ interface BottomLink {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
function openFrillWidget() {
|
|
15
|
-
const
|
|
16
|
-
|
|
15
|
+
const widget = (window as unknown as { __frillNovidadesWidget?: { open?: () => void } }).__frillNovidadesWidget;
|
|
16
|
+
widget?.open?.();
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export function BottomLinks() {
|