avada-components-seoon 1.0.29 → 1.0.31
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 +225 -27
- package/dist/components/CrossAppBanner/index.d.ts.map +1 -1
- package/dist/components/CrossAppBanner/index.js +46 -17
- package/dist/components/CrossAppBanner/index.js.map +1 -1
- package/dist/components/CrossAppBanner/types.d.ts +32 -7
- package/dist/components/CrossAppBanner/types.d.ts.map +1 -1
- package/dist/hooks/useFetchBannerData.d.ts +5 -0
- package/dist/hooks/useFetchBannerData.d.ts.map +1 -1
- package/dist/hooks/useFetchBannerData.js +2 -1
- package/dist/hooks/useFetchBannerData.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -26,8 +26,13 @@ A smart banner component that promotes other Avada apps to users. It automatical
|
|
|
26
26
|
- 🔄 Loading skeleton during data fetching
|
|
27
27
|
- 📱 Responsive design with Shopify Polaris
|
|
28
28
|
- 🎨 Modern UI with smooth animations
|
|
29
|
+
- 🔧 **Three configuration methods**: Default, Legacy (with appIds), and Dynamic (with JSON config)
|
|
29
30
|
|
|
30
|
-
####
|
|
31
|
+
#### Configuration Methods
|
|
32
|
+
|
|
33
|
+
The component supports three different ways to configure which apps to display:
|
|
34
|
+
|
|
35
|
+
##### 1. Default Method (Show all apps)
|
|
31
36
|
|
|
32
37
|
```tsx
|
|
33
38
|
import { CrossAppBanner } from 'avada-components-seoon';
|
|
@@ -37,7 +42,9 @@ function App() {
|
|
|
37
42
|
}
|
|
38
43
|
```
|
|
39
44
|
|
|
40
|
-
|
|
45
|
+
##### 2. Legacy Method (Explicit appIds)
|
|
46
|
+
|
|
47
|
+
Specify exactly which apps to show in priority order:
|
|
41
48
|
|
|
42
49
|
```tsx
|
|
43
50
|
import { CrossAppBanner } from 'avada-components-seoon';
|
|
@@ -46,29 +53,107 @@ function App() {
|
|
|
46
53
|
return (
|
|
47
54
|
<CrossAppBanner
|
|
48
55
|
shopDomain="your-store.myshopify.com"
|
|
56
|
+
appIds={['avada-seo-suite', 'ai-product-copy', 'seoon-blog']}
|
|
49
57
|
clickInstallCallback={() => {
|
|
50
58
|
console.log('User clicked install button');
|
|
51
|
-
// Track analytics, show confirmation, etc.
|
|
52
59
|
}}
|
|
53
|
-
appIds={['avada-seo-suite', 'ai-product-copy', 'seoon-blog']}
|
|
54
|
-
urlJson="https://your-custom-banner-data-url.com/banners.json"
|
|
55
60
|
/>
|
|
56
61
|
);
|
|
57
62
|
}
|
|
58
63
|
```
|
|
59
64
|
|
|
65
|
+
##### 3. Dynamic Method (JSON Configuration)
|
|
66
|
+
|
|
67
|
+
**Recommended for multi-app environments**: Configure apps dynamically from a JSON file without code changes:
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
import { CrossAppBanner } from 'avada-components-seoon';
|
|
71
|
+
|
|
72
|
+
function App() {
|
|
73
|
+
return (
|
|
74
|
+
<CrossAppBanner
|
|
75
|
+
shopDomain="your-store.myshopify.com"
|
|
76
|
+
appName="seoon"
|
|
77
|
+
position="homePage"
|
|
78
|
+
urlJson="https://cdn.example.com/bannerSeoApp.json"
|
|
79
|
+
clickInstallCallback={() => {
|
|
80
|
+
console.log('User clicked install button');
|
|
81
|
+
}}
|
|
82
|
+
/>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**JSON Configuration Structure:**
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"appSeoon": [
|
|
92
|
+
{
|
|
93
|
+
"title": "Avada SEO Suite",
|
|
94
|
+
"description": "Boost your store's SEO",
|
|
95
|
+
"image": "https://example.com/icon.png",
|
|
96
|
+
"url": "https://apps.shopify.com/avada-seo-suite",
|
|
97
|
+
"actionLabel": "Install Now",
|
|
98
|
+
"key": "seo"
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"appOutSide": [],
|
|
102
|
+
"settingApp": {
|
|
103
|
+
"seoon": {
|
|
104
|
+
"homePage": ["avada-seo-suite", "seoon-blog"],
|
|
105
|
+
"settingsPage": ["ai-product-copy"]
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
With this approach, you can manage banner configurations for different apps and pages from a single JSON file.
|
|
112
|
+
|
|
113
|
+
**Key Mapping Reference:**
|
|
114
|
+
|
|
115
|
+
The `key` field in JSON must match these values:
|
|
116
|
+
|
|
117
|
+
| App ID (appIds) | JSON Key (key) |
|
|
118
|
+
| -------------------- | ------------------- |
|
|
119
|
+
| `avada-seo-suite` | `seo` |
|
|
120
|
+
| `seoon-blog` | `blog` |
|
|
121
|
+
| `ai-product-copy` | `aiCopy` |
|
|
122
|
+
| `ap-speed-optimizer` | `plaza` |
|
|
123
|
+
| `joy-loyalty` | `joy-loyalty` |
|
|
124
|
+
| `chatty-ai` | `chatty-ai` |
|
|
125
|
+
| `gem-pages-landing` | `gem-pages-landing` |
|
|
126
|
+
|
|
60
127
|
#### Props
|
|
61
128
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
|
67
|
-
|
|
|
129
|
+
The component accepts different prop combinations depending on the configuration method:
|
|
130
|
+
|
|
131
|
+
**Common Props (all methods):**
|
|
132
|
+
|
|
133
|
+
| Prop | Type | Required | Default | Description |
|
|
134
|
+
| ---------------------- | ------------ | -------- | ------- | ---------------------------------------------------------------- |
|
|
135
|
+
| `shopDomain` | `string` | Yes | - | The Shopify domain of the store (e.g., 'my-store.myshopify.com') |
|
|
136
|
+
| `clickInstallCallback` | `() => void` | No | - | Callback function triggered when user clicks the install button |
|
|
137
|
+
| `urlJson` | `string` | No | - | URL to fetch banner data from |
|
|
138
|
+
|
|
139
|
+
**Legacy Method Props:**
|
|
140
|
+
|
|
141
|
+
| Prop | Type | Required | Description |
|
|
142
|
+
| -------- | ------------- | -------- | --------------------------------------------- |
|
|
143
|
+
| `appIds` | `AppIdKeys[]` | Yes | Array of app IDs to display in priority order |
|
|
144
|
+
|
|
145
|
+
**Dynamic Method Props:**
|
|
146
|
+
|
|
147
|
+
| Prop | Type | Required | Description |
|
|
148
|
+
| ---------- | -------- | -------- | -------------------------------------------------------------------- |
|
|
149
|
+
| `appName` | `string` | Yes | App name to lookup in JSON config (e.g., 'seoon', 'email-marketing') |
|
|
150
|
+
| `position` | `string` | Yes | Page position identifier (e.g., 'homePage', 'settingsPage') |
|
|
151
|
+
|
|
152
|
+
> **Note:** You can only use **one** configuration method at a time. TypeScript will prevent you from mixing methods.
|
|
68
153
|
|
|
69
154
|
#### Available App IDs
|
|
70
155
|
|
|
71
|
-
You can specify which apps to promote using the `appIds` prop:
|
|
156
|
+
You can specify which apps to promote using the `appIds` prop (Legacy Method):
|
|
72
157
|
|
|
73
158
|
```tsx
|
|
74
159
|
// SEOon Suite Apps
|
|
@@ -90,14 +175,46 @@ const OTHER_APPS = [
|
|
|
90
175
|
<CrossAppBanner shopDomain="store.myshopify.com" appIds={['avada-seo-suite', 'ai-product-copy']} />;
|
|
91
176
|
```
|
|
92
177
|
|
|
178
|
+
#### Which Method Should You Use?
|
|
179
|
+
|
|
180
|
+
**Use Default Method when:**
|
|
181
|
+
|
|
182
|
+
- You want to show all available apps
|
|
183
|
+
- Simple implementation with no customization needed
|
|
184
|
+
- Quick integration for testing
|
|
185
|
+
|
|
186
|
+
**Use Legacy Method when:**
|
|
187
|
+
|
|
188
|
+
- You need app-specific customization in code
|
|
189
|
+
- Different apps need different configurations
|
|
190
|
+
- You prefer code-based configuration over JSON
|
|
191
|
+
|
|
192
|
+
**Use Dynamic Method when:** ⭐ **Recommended**
|
|
193
|
+
|
|
194
|
+
- Managing multiple apps from your organization
|
|
195
|
+
- Need to update configurations without redeploying code
|
|
196
|
+
- Different pages/sections need different app promotions
|
|
197
|
+
- Want centralized configuration management
|
|
198
|
+
- A/B testing different app combinations
|
|
199
|
+
|
|
93
200
|
#### How It Works
|
|
94
201
|
|
|
95
|
-
|
|
96
|
-
|
|
202
|
+
##### Default & Legacy Methods:
|
|
203
|
+
|
|
204
|
+
1. **App Selection**: Uses provided `appIds` or defaults to all available apps
|
|
205
|
+
2. **Installation Check**: Checks each app in priority order
|
|
97
206
|
3. **Display Logic**: Shows the first non-installed, non-dismissed app
|
|
98
207
|
4. **Loading State**: Displays a skeleton loader while fetching data
|
|
99
|
-
5. **Dismissal**: Users can dismiss the banner
|
|
100
|
-
|
|
208
|
+
5. **Dismissal**: Users can dismiss the banner (saved in localStorage)
|
|
209
|
+
|
|
210
|
+
##### Dynamic Method:
|
|
211
|
+
|
|
212
|
+
1. **Fetch Configuration**: Loads JSON from `urlJson`
|
|
213
|
+
2. **Lookup Config**: Finds apps using `settingApp[appName][position]`
|
|
214
|
+
3. **Get App List**: Retrieves the configured app IDs for that location
|
|
215
|
+
4. **Installation Check**: Checks each app in the configured order
|
|
216
|
+
5. **Display Logic**: Shows the first non-installed, non-dismissed app
|
|
217
|
+
6. **Flexibility**: Change displayed apps by updating the JSON file (no code changes needed)
|
|
101
218
|
|
|
102
219
|
#### Styling
|
|
103
220
|
|
|
@@ -155,21 +272,33 @@ function App() {
|
|
|
155
272
|
|
|
156
273
|
## TypeScript Support
|
|
157
274
|
|
|
158
|
-
This package is written in TypeScript and includes full type definitions
|
|
275
|
+
This package is written in TypeScript and includes full type definitions with strict type safety:
|
|
159
276
|
|
|
160
277
|
```tsx
|
|
161
278
|
import { CrossAppBanner, type CrossAppBannerProps, type AppIdKeys } from 'avada-components-seoon';
|
|
162
279
|
|
|
163
|
-
//
|
|
164
|
-
const
|
|
280
|
+
// Legacy method - type checked
|
|
281
|
+
const legacyProps: CrossAppBannerProps = {
|
|
165
282
|
shopDomain: 'my-store.myshopify.com',
|
|
166
283
|
appIds: ['avada-seo-suite', 'ai-product-copy'],
|
|
167
284
|
clickInstallCallback: () => console.log('Clicked'),
|
|
168
285
|
};
|
|
169
286
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
287
|
+
// Dynamic method - type checked
|
|
288
|
+
const dynamicProps: CrossAppBannerProps = {
|
|
289
|
+
shopDomain: 'my-store.myshopify.com',
|
|
290
|
+
appName: 'seoon',
|
|
291
|
+
position: 'homePage',
|
|
292
|
+
urlJson: 'https://cdn.example.com/banner.json',
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
// TypeScript will prevent invalid combinations
|
|
296
|
+
const invalidProps: CrossAppBannerProps = {
|
|
297
|
+
shopDomain: 'my-store.myshopify.com',
|
|
298
|
+
appIds: ['avada-seo-suite'],
|
|
299
|
+
appName: 'seoon', // ❌ Error: Cannot use both methods
|
|
300
|
+
position: 'homePage',
|
|
301
|
+
};
|
|
173
302
|
|
|
174
303
|
// Use type helpers
|
|
175
304
|
const myApps: AppIdKeys[] = ['avada-seo-suite', 'seoon-blog'];
|
|
@@ -177,21 +306,59 @@ const myApps: AppIdKeys[] = ['avada-seo-suite', 'seoon-blog'];
|
|
|
177
306
|
|
|
178
307
|
## Examples
|
|
179
308
|
|
|
180
|
-
###
|
|
309
|
+
### Example 1: Default Configuration
|
|
310
|
+
|
|
311
|
+
Show all available apps with default priority:
|
|
312
|
+
|
|
313
|
+
```tsx
|
|
314
|
+
<CrossAppBanner shopDomain="store.myshopify.com" />
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Example 2: Legacy Method - Specific Apps
|
|
318
|
+
|
|
319
|
+
Show only specific apps in a custom order:
|
|
181
320
|
|
|
182
321
|
```tsx
|
|
183
322
|
<CrossAppBanner shopDomain="store.myshopify.com" appIds={['avada-seo-suite', 'ai-product-copy']} />
|
|
184
323
|
```
|
|
185
324
|
|
|
186
|
-
###
|
|
325
|
+
### Example 3: Dynamic Method - Different Pages
|
|
326
|
+
|
|
327
|
+
Configure different banners for different pages using JSON:
|
|
328
|
+
|
|
329
|
+
```tsx
|
|
330
|
+
// Home page
|
|
331
|
+
<CrossAppBanner
|
|
332
|
+
shopDomain="store.myshopify.com"
|
|
333
|
+
appName="seoon"
|
|
334
|
+
position="homePage"
|
|
335
|
+
urlJson="https://cdn.example.com/bannerSeoApp.json"
|
|
336
|
+
/>
|
|
337
|
+
|
|
338
|
+
// Settings page
|
|
339
|
+
<CrossAppBanner
|
|
340
|
+
shopDomain="store.myshopify.com"
|
|
341
|
+
appName="seoon"
|
|
342
|
+
position="settingsPage"
|
|
343
|
+
urlJson="https://cdn.example.com/bannerSeoApp.json"
|
|
344
|
+
/>
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Example 4: With Analytics Tracking
|
|
348
|
+
|
|
349
|
+
Track user interactions:
|
|
187
350
|
|
|
188
351
|
```tsx
|
|
189
352
|
<CrossAppBanner
|
|
190
353
|
shopDomain="store.myshopify.com"
|
|
354
|
+
appName="seoon"
|
|
355
|
+
position="homePage"
|
|
356
|
+
urlJson="https://cdn.example.com/bannerSeoApp.json"
|
|
191
357
|
clickInstallCallback={() => {
|
|
192
358
|
// Track to Google Analytics
|
|
193
359
|
gtag('event', 'cross_app_banner_click', {
|
|
194
|
-
app_name: '
|
|
360
|
+
app_name: 'seoon',
|
|
361
|
+
position: 'homePage',
|
|
195
362
|
});
|
|
196
363
|
|
|
197
364
|
// Track to custom analytics
|
|
@@ -200,10 +367,41 @@ const myApps: AppIdKeys[] = ['avada-seo-suite', 'seoon-blog'];
|
|
|
200
367
|
/>
|
|
201
368
|
```
|
|
202
369
|
|
|
203
|
-
###
|
|
370
|
+
### Example 5: Multi-App Environment
|
|
371
|
+
|
|
372
|
+
Use dynamic configuration for multiple apps:
|
|
373
|
+
|
|
374
|
+
```json
|
|
375
|
+
{
|
|
376
|
+
"settingApp": {
|
|
377
|
+
"seoon": {
|
|
378
|
+
"homePage": ["avada-seo-suite", "seoon-blog"],
|
|
379
|
+
"settingsPage": ["ai-product-copy"]
|
|
380
|
+
},
|
|
381
|
+
"email-marketing": {
|
|
382
|
+
"homePage": ["joy-loyalty", "chatty-ai"],
|
|
383
|
+
"campaignPage": ["gem-pages-landing"]
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
```
|
|
204
388
|
|
|
205
389
|
```tsx
|
|
206
|
-
|
|
390
|
+
// In SEO app
|
|
391
|
+
<CrossAppBanner
|
|
392
|
+
shopDomain="store.myshopify.com"
|
|
393
|
+
appName="seoon"
|
|
394
|
+
position="homePage"
|
|
395
|
+
urlJson="https://cdn.example.com/bannerSeoApp.json"
|
|
396
|
+
/>
|
|
397
|
+
|
|
398
|
+
// In Email Marketing app
|
|
399
|
+
<CrossAppBanner
|
|
400
|
+
shopDomain="store.myshopify.com"
|
|
401
|
+
appName="email-marketing"
|
|
402
|
+
position="homePage"
|
|
403
|
+
urlJson="https://cdn.example.com/bannerSeoApp.json"
|
|
404
|
+
/>
|
|
207
405
|
```
|
|
208
406
|
|
|
209
407
|
## Contributing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EACL,mBAAmB,EAGnB,uBAAuB,EAIxB,MAAM,SAAS,CAAC;AASjB,OAAO,cAAc,CAAC;AAEtB,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,EACL,mBAAmB,EAGnB,uBAAuB,EAIxB,MAAM,SAAS,CAAC;AASjB,OAAO,cAAc,CAAC;AAEtB,eAAO,MAAM,cAAc,EAAE,uBAsJ5B,CAAC;;AAEF,wBAA0C"}
|
|
@@ -3,19 +3,31 @@ import React, { useEffect, useState } from 'react';
|
|
|
3
3
|
import { isEmpty } from '../../helpers/isEmpty';
|
|
4
4
|
import useFetchBannerData from '../../hooks/useFetchBannerData';
|
|
5
5
|
import { useCheckAppInstalled } from '../../hooks/useCheckAppInstalled';
|
|
6
|
-
import { APP_IDS, APP_ID_KEYS,
|
|
6
|
+
import { APP_IDS, APP_ID_KEYS, } from './types';
|
|
7
7
|
import { createInitialDismissedState, createInitialInstalledState, getStorageKey, checkIfAppInstalled, } from './helpers';
|
|
8
8
|
import { BannerLoadingSkeleton } from './BannerLoadingSkeleton';
|
|
9
9
|
import { BannerCard } from './BannerCard';
|
|
10
10
|
import './index.scss';
|
|
11
|
-
export const CrossAppBanner = ({ shopDomain, clickInstallCallback, appIds
|
|
11
|
+
export const CrossAppBanner = ({ shopDomain, clickInstallCallback, appIds: propAppIds, urlJson = '', appName, position, }) => {
|
|
12
12
|
const { bannerData, isLoadingBannerData } = useFetchBannerData({ url: urlJson });
|
|
13
|
+
const getAppIdsFromConfig = () => {
|
|
14
|
+
if (appName && position && bannerData?.settingApp?.[appName]?.[position]) {
|
|
15
|
+
return bannerData.settingApp[appName][position];
|
|
16
|
+
}
|
|
17
|
+
return propAppIds ?? APP_ID_KEYS;
|
|
18
|
+
};
|
|
19
|
+
const [resolvedAppIds, setResolvedAppIds] = useState(propAppIds ?? APP_ID_KEYS);
|
|
13
20
|
const [isBannerDismissed, setIsBannerDismissed] = useState(false);
|
|
14
21
|
const [dismissedApps, setDismissedApps] = useState(createInitialDismissedState());
|
|
15
22
|
const [currentPriorityIndex, setCurrentPriorityIndex] = useState(0);
|
|
16
23
|
const [installedApps, setInstalledApps] = useState(createInitialInstalledState());
|
|
17
24
|
const [foundNonInstalledApp, setFoundNonInstalledApp] = useState(false);
|
|
18
|
-
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const newAppIds = getAppIdsFromConfig();
|
|
27
|
+
setResolvedAppIds(newAppIds);
|
|
28
|
+
}, [bannerData, appName, position, propAppIds]);
|
|
29
|
+
const appIds = resolvedAppIds;
|
|
30
|
+
const hasOutsideSeoApps = appIds.some(appId => bannerData?.appOutSide?.some(app => app.key === appId));
|
|
19
31
|
// Load dismissed apps from localStorage
|
|
20
32
|
useEffect(() => {
|
|
21
33
|
const dismissed = createInitialDismissedState();
|
|
@@ -55,18 +67,31 @@ export const CrossAppBanner = ({ shopDomain, clickInstallCallback, appIds = APP_
|
|
|
55
67
|
const getFirstNonInstalledApp = () => {
|
|
56
68
|
if (isBannerDismissed || isEmpty(bannerData) || isLoadingBannerData)
|
|
57
69
|
return null;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
const firstNonDismissedApp = appIds.find(appKey => !dismissedApps[appKey]);
|
|
71
|
+
if (!firstNonDismissedApp)
|
|
72
|
+
return null;
|
|
73
|
+
if (bannerData.appOutSide?.length) {
|
|
74
|
+
const outsideApp = bannerData.appOutSide.find(app => app.key === firstNonDismissedApp);
|
|
75
|
+
if (outsideApp)
|
|
76
|
+
return outsideApp;
|
|
77
|
+
}
|
|
78
|
+
if (bannerData.appSeoon?.length) {
|
|
79
|
+
const seoApp = bannerData.appSeoon.find(app => {
|
|
80
|
+
if (app.key === firstNonDismissedApp)
|
|
81
|
+
return true;
|
|
82
|
+
const mappedKey = APP_IDS[firstNonDismissedApp];
|
|
83
|
+
return mappedKey && app.key === mappedKey;
|
|
84
|
+
});
|
|
85
|
+
if (seoApp) {
|
|
86
|
+
const mappedKey = APP_IDS[firstNonDismissedApp];
|
|
87
|
+
if (mappedKey && installedApps[mappedKey]) {
|
|
88
|
+
setDismissedApps(prev => ({ ...prev, [firstNonDismissedApp]: true }));
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
return seoApp;
|
|
62
92
|
}
|
|
63
93
|
}
|
|
64
|
-
|
|
65
|
-
return !installedApps[APP_IDS[appKey]] && !dismissedApps[appKey];
|
|
66
|
-
});
|
|
67
|
-
if (!priorityApp || !bannerData.appSeoon)
|
|
68
|
-
return null;
|
|
69
|
-
return bannerData.appSeoon.find(app => APP_IDS[priorityApp] === app.key) ?? null;
|
|
94
|
+
return null;
|
|
70
95
|
};
|
|
71
96
|
if (isLoadingBannerData || isCheckingInstalled) {
|
|
72
97
|
return _jsx(BannerLoadingSkeleton, {});
|
|
@@ -76,10 +101,14 @@ export const CrossAppBanner = ({ shopDomain, clickInstallCallback, appIds = APP_
|
|
|
76
101
|
return null;
|
|
77
102
|
}
|
|
78
103
|
console.log('%c[Avada]%c Banner SEOon!', 'color: white; background: linear-gradient(90deg, #B7ECF5, #4CC9F0); padding: 2px 6px; border-radius: 4px;', 'color: #333; font-weight: bold;');
|
|
79
|
-
const currentAppIdToShow =
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
104
|
+
const currentAppIdToShow = appIds.find(appId => {
|
|
105
|
+
if (appId === appToShow.key)
|
|
106
|
+
return true;
|
|
107
|
+
const mappedKey = APP_IDS[appId];
|
|
108
|
+
return mappedKey === appToShow.key;
|
|
109
|
+
});
|
|
110
|
+
const isCurrentAppOutside = bannerData?.appOutSide?.some(app => app.key === appToShow.key) ?? false;
|
|
111
|
+
return (_jsx(_Fragment, { children: _jsx(BannerCard, { app: appToShow, appId: currentAppIdToShow, isOutsideApp: isCurrentAppOutside, onDismiss: handleDismiss, onInstallClick: clickInstallCallback }) }));
|
|
83
112
|
};
|
|
84
113
|
export default React.memo(CrossAppBanner);
|
|
85
114
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,kBAAqC,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAKL,OAAO,EACP,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -42,17 +42,38 @@ export interface CheckInstalledResponse {
|
|
|
42
42
|
userType?: string;
|
|
43
43
|
appId?: AppIdKeys;
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
interface BaseCrossAppBannerProps {
|
|
46
46
|
/** The shop domain to check app installation status */
|
|
47
47
|
shopDomain: string;
|
|
48
48
|
/** Callback function when user clicks install button */
|
|
49
49
|
clickInstallCallback?: () => void;
|
|
50
50
|
/** Custom content for the install button */
|
|
51
51
|
buttonContent?: string;
|
|
52
|
-
/**
|
|
53
|
-
appIds?: AppIdKeys[];
|
|
52
|
+
/** URL to fetch banner JSON configuration */
|
|
54
53
|
urlJson?: string;
|
|
55
54
|
}
|
|
55
|
+
/** Legacy configuration with explicit appIds */
|
|
56
|
+
interface LegacyCrossAppBannerProps extends BaseCrossAppBannerProps {
|
|
57
|
+
/** List of app IDs to check in priority order */
|
|
58
|
+
appIds: AppIdKeys[];
|
|
59
|
+
appName?: never;
|
|
60
|
+
position?: never;
|
|
61
|
+
}
|
|
62
|
+
/** New configuration with dynamic appName + position from JSON */
|
|
63
|
+
interface DynamicCrossAppBannerProps extends BaseCrossAppBannerProps {
|
|
64
|
+
/** App name for dynamic configuration (e.g., 'seoon', 'email-marketing') */
|
|
65
|
+
appName: string;
|
|
66
|
+
/** Position/page name for dynamic configuration (e.g., 'homePage', 'settingsPage') */
|
|
67
|
+
position: string;
|
|
68
|
+
appIds?: never;
|
|
69
|
+
}
|
|
70
|
+
/** Default configuration (no appIds, no appName/position) */
|
|
71
|
+
interface DefaultCrossAppBannerProps extends BaseCrossAppBannerProps {
|
|
72
|
+
appIds?: never;
|
|
73
|
+
appName?: never;
|
|
74
|
+
position?: never;
|
|
75
|
+
}
|
|
76
|
+
export type CrossAppBannerProps = LegacyCrossAppBannerProps | DynamicCrossAppBannerProps | DefaultCrossAppBannerProps;
|
|
56
77
|
/**
|
|
57
78
|
* CrossAppBanner Component Type
|
|
58
79
|
*
|
|
@@ -61,23 +82,27 @@ export interface CrossAppBannerProps {
|
|
|
61
82
|
*
|
|
62
83
|
* @example
|
|
63
84
|
* ```tsx
|
|
64
|
-
* //
|
|
85
|
+
* // Default usage (uses all apps from APP_ID_KEYS)
|
|
65
86
|
* <CrossAppBanner
|
|
66
87
|
* shopDomain="your-store.myshopify.com"
|
|
67
88
|
* />
|
|
68
89
|
*
|
|
69
|
-
* //
|
|
90
|
+
* // Legacy method: with explicit appIds
|
|
70
91
|
* <CrossAppBanner
|
|
71
92
|
* shopDomain="your-store.myshopify.com"
|
|
93
|
+
* appIds={['avada-seo-suite', 'ai-product-copy']}
|
|
72
94
|
* clickInstallCallback={() => console.log('Install clicked')}
|
|
73
95
|
* />
|
|
74
96
|
*
|
|
75
|
-
* //
|
|
97
|
+
* // New method: with dynamic config from JSON
|
|
76
98
|
* <CrossAppBanner
|
|
77
99
|
* shopDomain="your-store.myshopify.com"
|
|
78
|
-
*
|
|
100
|
+
* appName="seoon"
|
|
101
|
+
* position="homePage"
|
|
102
|
+
* urlJson="https://example.com/banner.json"
|
|
79
103
|
* />
|
|
80
104
|
* ```
|
|
81
105
|
*/
|
|
82
106
|
export type CrossAppBannerComponent = React.FC<CrossAppBannerProps>;
|
|
107
|
+
export {};
|
|
83
108
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,oBAAoB,CAAC;AACzC,eAAO,MAAM,QAAQ,eAAe,CAAC;AACrC,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AACrD,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AAExD,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAC7C,eAAO,MAAM,UAAU,cAAc,CAAC;AACtC,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAEzD,eAAO,MAAM,WAAW,UAQvB,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,wBAAwB,UAAuD,CAAC;AAE7F;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GACnB,KAAK,GACL,MAAM,GACN,QAAQ,GACR,OAAO,GACP,OAAO,eAAe,GACtB,OAAO,UAAU,GACjB,OAAO,qBAAqB,CAAC;AAEjC;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAQlD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/CrossAppBanner/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,oBAAoB,CAAC;AACzC,eAAO,MAAM,QAAQ,eAAe,CAAC;AACrC,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AACrD,eAAO,MAAM,mBAAmB,uBAAuB,CAAC;AAExD,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAC7C,eAAO,MAAM,UAAU,cAAc,CAAC;AACtC,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAEzD,eAAO,MAAM,WAAW,UAQvB,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,wBAAwB,UAAuD,CAAC;AAE7F;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GACnB,KAAK,GACL,MAAM,GACN,QAAQ,GACR,OAAO,GACP,OAAO,eAAe,GACtB,OAAO,UAAU,GACjB,OAAO,qBAAqB,CAAC;AAEjC;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAQlD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,UAAU,uBAAuB;IAC/B,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,gDAAgD;AAChD,UAAU,yBAA0B,SAAQ,uBAAuB;IACjE,iDAAiD;IACjD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,kEAAkE;AAClE,UAAU,0BAA2B,SAAQ,uBAAuB;IAClE,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB;AAED,6DAA6D;AAC7D,UAAU,0BAA2B,SAAQ,uBAAuB;IAClE,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAC3B,yBAAyB,GACzB,0BAA0B,GAC1B,0BAA0B,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -9,6 +9,11 @@ export interface AppBannerItem {
|
|
|
9
9
|
export interface BannerSeoAppData {
|
|
10
10
|
appSeoon: AppBannerItem[];
|
|
11
11
|
appOutSide: AppBannerItem[];
|
|
12
|
+
settingApp?: {
|
|
13
|
+
[appName: string]: {
|
|
14
|
+
[position: string]: string[];
|
|
15
|
+
};
|
|
16
|
+
};
|
|
12
17
|
}
|
|
13
18
|
interface UseFetchBannerDataOptions {
|
|
14
19
|
url?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchBannerData.d.ts","sourceRoot":"","sources":["../../src/hooks/useFetchBannerData.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"useFetchBannerData.d.ts","sourceRoot":"","sources":["../../src/hooks/useFetchBannerData.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE;QACX,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;SAC9B,CAAC;KACH,CAAC;CACH;AAED,UAAU,yBAAyB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,wBAAwB;IAChC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;CAChE;AAID,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,GAAQ,EACR,QAAe,GAChB,GAAE,yBAA8B,GAAG,wBAAwB,CA8B3D"}
|
|
@@ -18,8 +18,9 @@ export default function useFetchBannerData({ url = '', initLoad = true, } = {})
|
|
|
18
18
|
dedupingInterval: TEN_MINUTES,
|
|
19
19
|
focusThrottleInterval: TEN_MINUTES,
|
|
20
20
|
});
|
|
21
|
+
console.log(data);
|
|
21
22
|
return {
|
|
22
|
-
bannerData: data ?? { appSeoon: [], appOutSide: [] },
|
|
23
|
+
bannerData: data ?? { appSeoon: [], appOutSide: [], settingApp: {} },
|
|
23
24
|
isLoadingBannerData: isLoading,
|
|
24
25
|
fetchError: error,
|
|
25
26
|
refetchBannerData: () => mutate(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFetchBannerData.js","sourceRoot":"","sources":["../../src/hooks/useFetchBannerData.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"useFetchBannerData.js","sourceRoot":"","sources":["../../src/hooks/useFetchBannerData.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,KAAK,CAAC;AAiCzB,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,GAAG,GAAG,EAAE,EACR,QAAQ,GAAG,IAAI,MACc,EAAE;IAC/B,MAAM,MAAM,GAAG,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5C,MAAM,OAAO,GAAG,KAAK,EAAE,QAAgB,EAA6B,EAAE;QACpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,YAAY,GAAqB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAmB,MAAM,EAAE,OAAO,EAAE;QACnF,iBAAiB,EAAE,KAAK;QACxB,qBAAqB,EAAE,KAAK;QAC5B,iBAAiB,EAAE,KAAK;QACxB,kBAAkB,EAAE,KAAK;QACzB,gBAAgB,EAAE,WAAW;QAC7B,qBAAqB,EAAE,WAAW;KACnC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO;QACL,UAAU,EAAE,IAAI,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACpE,mBAAmB,EAAE,SAAS;QAC9B,UAAU,EAAE,KAAK;QACjB,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;KAClC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "avada-components-seoon",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.31",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A collection of React components built with Shopify Polaris",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"react-circular-progressbar": "^2.2.0",
|
|
46
46
|
"react-dom": "^18.0.0",
|
|
47
47
|
"swr": "^2.3.6",
|
|
48
|
-
"
|
|
48
|
+
"uuid": "^11.0.3"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@google-cloud/translate": "8.0.2",
|