avada-components-seoon 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/CrossAppBanner/index.d.ts +33 -0
- package/dist/components/CrossAppBanner/index.d.ts.map +1 -1
- package/dist/components/CrossAppBanner/index.js +35 -62
- package/dist/components/CrossAppBanner/index.js.map +1 -1
- package/dist/config/constants.js +4 -4
- package/dist/config/constants.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -3
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
import './index.scss';
|
|
2
2
|
import { CrossAppBannerComponent } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* CrossAppBanner Component
|
|
5
|
+
*
|
|
6
|
+
* A banner component that displays promotional content for other Avada apps.
|
|
7
|
+
* It checks the installation status of specified apps and shows the first non-installed app.
|
|
8
|
+
* Each app can be dismissed independently.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* // Basic usage
|
|
13
|
+
* <CrossAppBanner
|
|
14
|
+
* shopDomain="your-store.myshopify.com"
|
|
15
|
+
* />
|
|
16
|
+
*
|
|
17
|
+
* // With custom callbacks
|
|
18
|
+
* <CrossAppBanner
|
|
19
|
+
* shopDomain="your-store.myshopify.com"
|
|
20
|
+
* clickInstallCallback={() => console.log('Install clicked')}
|
|
21
|
+
* />
|
|
22
|
+
*
|
|
23
|
+
* // With specific apps to check
|
|
24
|
+
* <CrossAppBanner
|
|
25
|
+
* shopDomain="your-store.myshopify.com"
|
|
26
|
+
* appIds={['avada-seo-suite', 'ai-product-copy']}
|
|
27
|
+
* />
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @param props - Component props
|
|
31
|
+
* @param props.shopDomain - The shop domain to check app installation status
|
|
32
|
+
* @param props.clickInstallCallback - Callback function when user clicks install button
|
|
33
|
+
* @param props.appIds - List of app IDs to check in priority order, current support 'avada-seo-suite', 'seoon-blog', 'ai-product-copy', 'ap-speed-optimizer'
|
|
34
|
+
* @returns JSX.Element | null
|
|
35
|
+
*/
|
|
3
36
|
export declare const CrossAppBanner: CrossAppBannerComponent;
|
|
4
37
|
export default CrossAppBanner;
|
|
5
38
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/index.tsx"],"names":[],"mappings":"AAGA,OAAO,cAAc,CAAC;AAYtB,OAAO,EAKL,uBAAuB,EAExB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,cAAc,EAAE,uBA0L5B,CAAC;AACF,eAAe,cAAc,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { AppProvider, Button, LegacyCard, Text, Thumbnail } from '@shopify/polaris';
|
|
3
|
-
import { useEffect, useState
|
|
4
|
-
import { QueryClient, QueryClientProvider, useQuery } from '@tanstack/react-query';
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
5
4
|
import './index.scss';
|
|
6
5
|
import { listCrossApps } from '../../config/constants';
|
|
7
6
|
import { getAppIdByOrigin, getCheckInstalledProxyUrl, getProxyAccessToken, } from '../../helpers/getProxyEndPoint';
|
|
7
|
+
import useFetchApi from '../../hooks/api/useFetchApi';
|
|
8
8
|
import { XIcon } from '@shopify/polaris-icons';
|
|
9
9
|
import { isEmpty } from 'lodash';
|
|
10
10
|
import { APP_IDS, } from './types';
|
|
@@ -41,16 +41,6 @@ import { APP_IDS, } from './types';
|
|
|
41
41
|
* @param props.appIds - List of app IDs to check in priority order, current support 'avada-seo-suite', 'seoon-blog', 'ai-product-copy', 'ap-speed-optimizer'
|
|
42
42
|
* @returns JSX.Element | null
|
|
43
43
|
*/
|
|
44
|
-
const defaultQueryClient = new QueryClient({
|
|
45
|
-
defaultOptions: {
|
|
46
|
-
queries: {
|
|
47
|
-
staleTime: 25 * 60 * 1000,
|
|
48
|
-
gcTime: 30 * 60 * 1000,
|
|
49
|
-
retry: 2,
|
|
50
|
-
refetchOnWindowFocus: false,
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
44
|
export const CrossAppBanner = ({ shopDomain, clickInstallCallback, appIds = ['avada-seo-suite', 'seoon-blog', 'ai-product-copy', 'ap-speed-optimizer'], }) => {
|
|
55
45
|
const [isBannerDismissed, setIsBannerDismissed] = useState(false);
|
|
56
46
|
const [dismissedApps, setDismissedApps] = useState({
|
|
@@ -99,54 +89,39 @@ export const CrossAppBanner = ({ shopDomain, clickInstallCallback, appIds = ['av
|
|
|
99
89
|
// Get current app to check based on priority
|
|
100
90
|
const currentAppId = appIds[currentPriorityIndex];
|
|
101
91
|
const shouldCheckCurrentApp = currentAppId && !foundNonInstalledApp;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
// Check if current app is dismissed
|
|
119
|
-
const isCurrentAppDismissed = currentAppId
|
|
120
|
-
? localStorage.getItem(getStorageKey(currentAppId)) === 'true'
|
|
121
|
-
: false;
|
|
122
|
-
const { data, isLoading: loading, refetch: fetchApi, } = useQuery({
|
|
123
|
-
queryKey: ['appInstallation', currentAppId, shopDomain],
|
|
124
|
-
queryFn: () => fetchAppInstallationStatus(currentAppId),
|
|
125
|
-
enabled: shouldCheckCurrentApp && !foundNonInstalledApp && !isCurrentAppDismissed,
|
|
126
|
-
staleTime: 25 * 60 * 1000,
|
|
127
|
-
gcTime: 30 * 60 * 1000,
|
|
128
|
-
retry: 2,
|
|
129
|
-
refetchOnWindowFocus: false,
|
|
92
|
+
// Only check installation for current priority app
|
|
93
|
+
const { fetchApi, data, loading } = useFetchApi({
|
|
94
|
+
url: getCheckInstalledProxyUrl(currentAppId),
|
|
95
|
+
headers: {
|
|
96
|
+
'X-SEO-Access-Token': getProxyAccessToken(currentAppId),
|
|
97
|
+
'X-SEO-Shop-Domain': shopDomain,
|
|
98
|
+
},
|
|
99
|
+
initLoad: false,
|
|
100
|
+
initLoading: false,
|
|
101
|
+
keepPreviousData: false,
|
|
102
|
+
onSuccess: data => {
|
|
103
|
+
return {
|
|
104
|
+
...data,
|
|
105
|
+
appId: currentAppId,
|
|
106
|
+
};
|
|
107
|
+
},
|
|
130
108
|
});
|
|
109
|
+
// Effect to check app installation
|
|
131
110
|
useEffect(() => {
|
|
132
|
-
if (shouldCheckCurrentApp
|
|
133
|
-
|
|
111
|
+
if (shouldCheckCurrentApp) {
|
|
112
|
+
const isDismissed = localStorage.getItem(getStorageKey(currentAppId)) === 'true';
|
|
113
|
+
if (!isDismissed) {
|
|
114
|
+
fetchApi();
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// If app is dismissed, move to next app
|
|
134
118
|
setCurrentPriorityIndex(prev => prev + 1);
|
|
135
119
|
}
|
|
136
120
|
}
|
|
137
|
-
}, [
|
|
138
|
-
shouldCheckCurrentApp,
|
|
139
|
-
foundNonInstalledApp,
|
|
140
|
-
isCurrentAppDismissed,
|
|
141
|
-
currentPriorityIndex,
|
|
142
|
-
appIds.length,
|
|
143
|
-
]);
|
|
121
|
+
}, [currentAppId, shouldCheckCurrentApp]);
|
|
144
122
|
// Effect to handle installation check result
|
|
145
123
|
useEffect(() => {
|
|
146
|
-
if (!isEmpty(data) &&
|
|
147
|
-
data.appId === currentAppId &&
|
|
148
|
-
shouldCheckCurrentApp &&
|
|
149
|
-
!foundNonInstalledApp) {
|
|
124
|
+
if (!isEmpty(data) && data.appId === currentAppId && shouldCheckCurrentApp) {
|
|
150
125
|
const newInstalledApps = { ...installedApps };
|
|
151
126
|
const isInstalled = currentAppId === 'avada-seo-suite' || currentAppId === 'seoon-blog'
|
|
152
127
|
? data.userType === 'user'
|
|
@@ -154,15 +129,13 @@ export const CrossAppBanner = ({ shopDomain, clickInstallCallback, appIds = ['av
|
|
|
154
129
|
newInstalledApps[APP_IDS[currentAppId]] = isInstalled;
|
|
155
130
|
setInstalledApps(newInstalledApps);
|
|
156
131
|
if (isInstalled) {
|
|
157
|
-
|
|
158
|
-
setCurrentPriorityIndex(prev => prev + 1);
|
|
159
|
-
}
|
|
132
|
+
setCurrentPriorityIndex(prev => prev + 1);
|
|
160
133
|
}
|
|
161
134
|
else {
|
|
162
135
|
setFoundNonInstalledApp(true);
|
|
163
136
|
}
|
|
164
137
|
}
|
|
165
|
-
}, [data]);
|
|
138
|
+
}, [data, currentAppId, shouldCheckCurrentApp]);
|
|
166
139
|
const handleDismiss = (appId) => {
|
|
167
140
|
localStorage.setItem(getStorageKey(appId), 'true');
|
|
168
141
|
setIsBannerDismissed(true);
|
|
@@ -191,11 +164,11 @@ export const CrossAppBanner = ({ shopDomain, clickInstallCallback, appIds = ['av
|
|
|
191
164
|
if (checking || !appToShow || isBannerDismissed || isEmpty(data))
|
|
192
165
|
return null;
|
|
193
166
|
const currentAppIdToShow = Object.entries(APP_IDS).find(([_, value]) => value === appToShow.key)?.[0];
|
|
194
|
-
return (_jsx(AppProvider, { i18n: {}, children: _jsx(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
167
|
+
return (_jsx(AppProvider, { i18n: {}, children: _jsx(LegacyCard, { sectioned: true, children: _jsxs("div", { className: 'AC-CrossAppBanner', children: [_jsx("div", { className: 'AC-CrossAppBanner__Thumbnail', children: _jsx(Thumbnail, { size: "small", source: appToShow.image, alt: '' }) }), _jsxs("div", { className: 'AC-CrossAppBanner__Content', children: [_jsx(Text, { variant: "headingMd", as: "strong", children: appToShow.title }), _jsx("br", {}), appToShow.description] }), _jsx("div", { className: 'AC-CrossAppBanner__Install', children: _jsx(Button, { onClick: () => {
|
|
168
|
+
window.open(appToShow.url);
|
|
169
|
+
if (clickInstallCallback)
|
|
170
|
+
clickInstallCallback();
|
|
171
|
+
}, children: appToShow.actionLabel }) }), _jsx("div", { className: 'AC-CrossAppBanner__Close', children: _jsx(Button, { icon: XIcon, variant: "tertiary", onClick: () => handleDismiss(currentAppIdToShow) }) })] }) }) }));
|
|
199
172
|
};
|
|
200
173
|
export default CrossAppBanner;
|
|
201
174
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAa,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/index.tsx"],"names":[],"mappings":"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"}
|
package/dist/config/constants.js
CHANGED
|
@@ -18,7 +18,7 @@ export const listCrossApps = [
|
|
|
18
18
|
title: 'How to write blog posts that rank on Google and show up in AI search?',
|
|
19
19
|
description: 'Use our AI-powered SEO blog builder to create high-quality content that answers real customer queries. Optimized for Google, Search Generative Experience and voice search',
|
|
20
20
|
image: 'https://cdn.shopify.com/s/files/1/0622/8439/8665/files/SEOon.jpg?v=1745392523&width=40',
|
|
21
|
-
url: 'https://apps.shopify.com/seoon-blog',
|
|
21
|
+
url: 'https://apps.shopify.com/seoon-blog?utm_source=seo&utm_medium=homepage&utm_term=free_to_install',
|
|
22
22
|
actionLabel: 'Free to install',
|
|
23
23
|
key: 'blog',
|
|
24
24
|
},
|
|
@@ -26,7 +26,7 @@ export const listCrossApps = [
|
|
|
26
26
|
title: 'Write better product descriptions, faster — with AI',
|
|
27
27
|
description: 'Generate SEO-optimized, high-converting product copy in bulk or one by one. Stay on-brand, support multiple languages, and get ready for AI-first search like ChatGPT',
|
|
28
28
|
image: 'https://cdn.shopify.com/app-store/listing_images/94a39d7591aada58e5a9774f23f933c0/icon/CLvM7tmkkI0DEAE=.jpeg?width=40',
|
|
29
|
-
url: 'https://apps.shopify.com/ai-product-copy',
|
|
29
|
+
url: 'https://apps.shopify.com/ai-product-copy?utm_source=seo&utm_medium=homepage&utm_term=free_to_install',
|
|
30
30
|
actionLabel: 'Free to install',
|
|
31
31
|
key: 'aiCopy',
|
|
32
32
|
},
|
|
@@ -34,7 +34,7 @@ export const listCrossApps = [
|
|
|
34
34
|
title: 'Slow site hurting your SEO? Fix all images with one free click!',
|
|
35
35
|
description: 'Speed up your store and boost your SEO instantly with our 100% free, one-click image optimizer. No setup, no hassle just install the app and let it do the work for you.',
|
|
36
36
|
image: 'https://cdnapps.avada.io/ag-blog/LogoBannerCrossAppImage.png',
|
|
37
|
-
url: 'https://apps.shopify.com/ap-speed-optimizer',
|
|
37
|
+
url: 'https://apps.shopify.com/ap-speed-optimizer?utm_source=seo&utm_medium=homepage&utm_term=free_to_install',
|
|
38
38
|
actionLabel: 'Optimize images now',
|
|
39
39
|
key: 'plaza',
|
|
40
40
|
},
|
|
@@ -42,7 +42,7 @@ export const listCrossApps = [
|
|
|
42
42
|
title: 'Boost Your SEO Health!',
|
|
43
43
|
description: 'Resolve issues that hold your site back—404 errors, image problems, slow loading speed, and poor metadata. Keep your store fast, optimized, and ranking higher.',
|
|
44
44
|
image: 'https://cdn.shopify.com/app-store/listing_images/12c5f7113c40f4e4e5a57cad4ff6464f/icon/CMnGhqeTsPwCEAE=.jpeg?width=40',
|
|
45
|
-
url: 'https://apps.shopify.com/avada-seo-suite',
|
|
45
|
+
url: 'https://apps.shopify.com/avada-seo-suite?utm_source=seo&utm_medium=homepage&utm_term=free_to_install',
|
|
46
46
|
actionLabel: 'Fix SEO Issues',
|
|
47
47
|
key: 'seo',
|
|
48
48
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,iCAAiC,CAAC;AACxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AACxE,MAAM,CAAC,MAAM,wBAAwB,GAAG,yDAAyD,CAAC;AAClG,MAAM,CAAC,MAAM,6BAA6B,GAAG,+CAA+C,CAAC;AAE7F,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,mDAAmD,CAAC;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,yCAAyC,CAAC;AAEjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,kCAAkC,CAAC;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,kCAAkC,CAAC;AAExE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B;QACE,KAAK,EAAE,uEAAuE;QAC9E,WAAW,EACT,4KAA4K;QAC9K,KAAK,EAAE,wFAAwF;QAC/F,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,iCAAiC,CAAC;AACxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AACxE,MAAM,CAAC,MAAM,wBAAwB,GAAG,yDAAyD,CAAC;AAClG,MAAM,CAAC,MAAM,6BAA6B,GAAG,+CAA+C,CAAC;AAE7F,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,mDAAmD,CAAC;AACtF,MAAM,CAAC,MAAM,uBAAuB,GAAG,yCAAyC,CAAC;AAEjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,kCAAkC,CAAC;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,kCAAkC,CAAC;AAExE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B;QACE,KAAK,EAAE,uEAAuE;QAC9E,WAAW,EACT,4KAA4K;QAC9K,KAAK,EAAE,wFAAwF;QAC/F,GAAG,EAAE,iGAAiG;QACtG,WAAW,EAAE,iBAAiB;QAC9B,GAAG,EAAE,MAAM;KACZ;IACD;QACE,KAAK,EAAE,qDAAqD;QAC5D,WAAW,EACT,uKAAuK;QACzK,KAAK,EACH,uHAAuH;QACzH,GAAG,EAAE,sGAAsG;QAC3G,WAAW,EAAE,iBAAiB;QAC9B,GAAG,EAAE,QAAQ;KACd;IACD;QACE,KAAK,EAAE,iEAAiE;QACxE,WAAW,EACT,0KAA0K;QAC5K,KAAK,EAAE,8DAA8D;QACrE,GAAG,EAAE,yGAAyG;QAC9G,WAAW,EAAE,qBAAqB;QAClC,GAAG,EAAE,OAAO;KACb;IACD;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,iKAAiK;QACnK,KAAK,EACH,uHAAuH;QACzH,GAAG,EAAE,sGAAsG;QAC3G,WAAW,EAAE,gBAAgB;QAC7B,GAAG,EAAE,KAAK;KACX;CACF,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "avada-components-seoon",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A collection of React components built with Shopify Polaris",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -45,8 +45,7 @@
|
|
|
45
45
|
"react": "^18.0.0",
|
|
46
46
|
"react-circular-progressbar": "^2.2.0",
|
|
47
47
|
"react-dom": "^18.0.0",
|
|
48
|
-
"react-redux": "^9.2.0"
|
|
49
|
-
"@tanstack/react-query": "^5.76.2"
|
|
48
|
+
"react-redux": "^9.2.0"
|
|
50
49
|
},
|
|
51
50
|
"devDependencies": {
|
|
52
51
|
"@google-cloud/translate": "8.0.2",
|