|
|
@@ -7,6 +7,7 @@ import { Alert, AlertDescription } from "@/components/ui/alert";
|
|
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
|
|
|
import { Loader2, ShoppingBag, ExternalLink, CheckCircle2, AlertCircle, Key, Phone } from "lucide-react";
|
|
|
import { API_URL } from "@/lib/config";
|
|
|
+import { useTranslation } from "react-i18next";
|
|
|
|
|
|
interface PhoneNumber {
|
|
|
id: string;
|
|
|
@@ -29,6 +30,7 @@ interface WooCommerceConnectProps {
|
|
|
}
|
|
|
|
|
|
export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
+ const { t } = useTranslation();
|
|
|
const [storeUrl, setStoreUrl] = useState("");
|
|
|
const [consumerKey, setConsumerKey] = useState("");
|
|
|
const [consumerSecret, setConsumerSecret] = useState("");
|
|
|
@@ -241,23 +243,23 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
|
|
|
// Validate inputs
|
|
|
if (!storeUrl.trim()) {
|
|
|
- setError("Please enter your WooCommerce store URL");
|
|
|
+ setError(t('integrations.woocommerceConnect.errors.urlRequired'));
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!consumerKey.trim()) {
|
|
|
- setError("Please enter your Consumer Key");
|
|
|
+ setError(t('integrations.woocommerceConnect.errors.consumerKeyRequired'));
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!consumerSecret.trim()) {
|
|
|
- setError("Please enter your Consumer Secret");
|
|
|
+ setError(t('integrations.woocommerceConnect.errors.consumerSecretRequired'));
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!selectedPhoneNumber) {
|
|
|
- setPhoneNumberError("Please select a phone number for this store");
|
|
|
- setError("Please select a country, city, and phone number before connecting");
|
|
|
+ setPhoneNumberError(t('integrations.woocommerceConnect.errors.phoneRequired'));
|
|
|
+ setError(t('integrations.woocommerceConnect.errors.phoneRequiredError'));
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -276,11 +278,11 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
try {
|
|
|
const url = new URL(normalizedUrl);
|
|
|
if (url.protocol !== 'https:') {
|
|
|
- setError("Store URL must use HTTPS for security");
|
|
|
+ setError(t('integrations.woocommerceConnect.errors.httpsRequired'));
|
|
|
return;
|
|
|
}
|
|
|
} catch (e) {
|
|
|
- setError("Please enter a valid store URL (e.g., https://yourstore.com)");
|
|
|
+ setError(t('integrations.woocommerceConnect.errors.invalidUrl'));
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -290,7 +292,7 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
// Get auth token
|
|
|
const sessionData = localStorage.getItem('session_data');
|
|
|
if (!sessionData) {
|
|
|
- setError("Authentication required. Please log in again.");
|
|
|
+ setError(t('integrations.woocommerceConnect.errors.authRequired'));
|
|
|
setIsConnecting(false);
|
|
|
return;
|
|
|
}
|
|
|
@@ -324,7 +326,7 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
|
|
|
if (data.success) {
|
|
|
setSuccess(true);
|
|
|
- setSuccessMessage(`Store "${data.storeName}" connected successfully!`);
|
|
|
+ setSuccessMessage(t('integrations.woocommerceConnect.storeConnected', { storeName: data.storeName }));
|
|
|
|
|
|
// Redirect to webshops page after a short delay
|
|
|
setTimeout(() => {
|
|
|
@@ -339,7 +341,7 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
|
|
|
} catch (err) {
|
|
|
console.error("Connection error:", err);
|
|
|
- setError(err instanceof Error ? err.message : "Failed to connect to WooCommerce. Please try again.");
|
|
|
+ setError(err instanceof Error ? err.message : t('integrations.woocommerceConnect.errors.connectionFailed'));
|
|
|
setIsConnecting(false);
|
|
|
}
|
|
|
};
|
|
|
@@ -350,9 +352,9 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
<div className="flex items-center gap-3">
|
|
|
<ShoppingBag className="w-8 h-8 text-purple-500" />
|
|
|
<div>
|
|
|
- <CardTitle className="text-white text-2xl">Connect WooCommerce Store</CardTitle>
|
|
|
+ <CardTitle className="text-white text-2xl">{t('integrations.woocommerceConnect.title')}</CardTitle>
|
|
|
<CardDescription className="text-slate-400">
|
|
|
- Link your WooCommerce shop to enable AI-powered customer support
|
|
|
+ {t('integrations.woocommerceConnect.description')}
|
|
|
</CardDescription>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -383,30 +385,30 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
<div className="space-y-4">
|
|
|
<div className="space-y-2">
|
|
|
<Label htmlFor="manualStoreUrl" className="text-white">
|
|
|
- WooCommerce Store URL
|
|
|
+ {t('integrations.woocommerceConnect.storeUrlLabel')}
|
|
|
</Label>
|
|
|
<Input
|
|
|
id="manualStoreUrl"
|
|
|
type="text"
|
|
|
- placeholder="https://yourstore.com"
|
|
|
+ placeholder={t('integrations.woocommerceConnect.storeUrlPlaceholder')}
|
|
|
value={storeUrl}
|
|
|
onChange={(e) => setStoreUrl(e.target.value)}
|
|
|
className="bg-slate-700 border-slate-600 text-white placeholder:text-slate-400"
|
|
|
disabled={isConnecting}
|
|
|
/>
|
|
|
<p className="text-sm text-slate-400">
|
|
|
- Enter your WooCommerce store URL (must use HTTPS)
|
|
|
+ {t('integrations.woocommerceConnect.storeUrlHint')}
|
|
|
</p>
|
|
|
</div>
|
|
|
|
|
|
<div className="space-y-2">
|
|
|
<Label htmlFor="consumerKey" className="text-white">
|
|
|
- Consumer Key
|
|
|
+ {t('integrations.woocommerceConnect.consumerKeyLabel')}
|
|
|
</Label>
|
|
|
<Input
|
|
|
id="consumerKey"
|
|
|
type="text"
|
|
|
- placeholder="ck_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
|
+ placeholder={t('integrations.woocommerceConnect.consumerKeyPlaceholder')}
|
|
|
value={consumerKey}
|
|
|
onChange={(e) => setConsumerKey(e.target.value)}
|
|
|
className="bg-slate-700 border-slate-600 text-white placeholder:text-slate-400 font-mono text-sm"
|
|
|
@@ -416,12 +418,12 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
|
|
|
<div className="space-y-2">
|
|
|
<Label htmlFor="consumerSecret" className="text-white">
|
|
|
- Consumer Secret
|
|
|
+ {t('integrations.woocommerceConnect.consumerSecretLabel')}
|
|
|
</Label>
|
|
|
<Input
|
|
|
id="consumerSecret"
|
|
|
type="password"
|
|
|
- placeholder="cs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
|
+ placeholder={t('integrations.woocommerceConnect.consumerSecretPlaceholder')}
|
|
|
value={consumerSecret}
|
|
|
onChange={(e) => setConsumerSecret(e.target.value)}
|
|
|
onKeyPress={(e) => e.key === "Enter" && !isConnecting && handleManualConnect()}
|
|
|
@@ -434,23 +436,23 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
<div className="space-y-4 border border-slate-600 rounded-lg p-4 bg-slate-700/30">
|
|
|
<h4 className="text-white font-medium flex items-center gap-2">
|
|
|
<Phone className="w-4 h-4 text-cyan-500" />
|
|
|
- Select Phone Number
|
|
|
+ {t('integrations.woocommerceConnect.selectPhoneTitle')}
|
|
|
</h4>
|
|
|
|
|
|
{/* Country Selector */}
|
|
|
<div className="space-y-2">
|
|
|
<Label className="text-slate-300">
|
|
|
- Country <span className="text-red-400">*</span>
|
|
|
+ {t('integrations.woocommerceConnect.countryLabel')} <span className="text-red-400">{t('integrations.woocommerceConnect.countryRequired')}</span>
|
|
|
</Label>
|
|
|
{loadingCountries ? (
|
|
|
<div className="flex items-center justify-center py-3">
|
|
|
<Loader2 className="w-5 h-5 text-cyan-500 animate-spin" />
|
|
|
- <span className="ml-2 text-sm text-slate-400">Loading countries...</span>
|
|
|
+ <span className="ml-2 text-sm text-slate-400">{t('integrations.woocommerceConnect.loadingCountries')}</span>
|
|
|
</div>
|
|
|
) : countries.length > 0 ? (
|
|
|
<Select value={selectedCountry} onValueChange={setSelectedCountry} disabled={isConnecting}>
|
|
|
<SelectTrigger className={`bg-slate-700 border-slate-600 text-white ${!selectedCountry ? 'border-red-500/50' : ''}`}>
|
|
|
- <SelectValue placeholder="Select a country" />
|
|
|
+ <SelectValue placeholder={t('integrations.woocommerceConnect.selectCountryPlaceholder')} />
|
|
|
</SelectTrigger>
|
|
|
<SelectContent className="bg-slate-700 border-slate-600">
|
|
|
{countries.map((country) => (
|
|
|
@@ -463,7 +465,7 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
) : (
|
|
|
<div className="bg-red-500/10 border border-red-500/30 rounded-md p-3">
|
|
|
<p className="text-sm text-red-400">
|
|
|
- No countries with available phone numbers.
|
|
|
+ {t('integrations.woocommerceConnect.noCountriesError')}
|
|
|
</p>
|
|
|
</div>
|
|
|
)}
|
|
|
@@ -473,17 +475,17 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
{selectedCountry && (
|
|
|
<div className="space-y-2">
|
|
|
<Label className="text-slate-300">
|
|
|
- City <span className="text-red-400">*</span>
|
|
|
+ {t('integrations.woocommerceConnect.cityLabel')} <span className="text-red-400">{t('integrations.woocommerceConnect.countryRequired')}</span>
|
|
|
</Label>
|
|
|
{loadingCities ? (
|
|
|
<div className="flex items-center justify-center py-3">
|
|
|
<Loader2 className="w-5 h-5 text-cyan-500 animate-spin" />
|
|
|
- <span className="ml-2 text-sm text-slate-400">Loading cities...</span>
|
|
|
+ <span className="ml-2 text-sm text-slate-400">{t('integrations.woocommerceConnect.loadingCities')}</span>
|
|
|
</div>
|
|
|
) : cities.length > 0 ? (
|
|
|
<Select value={selectedCity} onValueChange={setSelectedCity} disabled={isConnecting}>
|
|
|
<SelectTrigger className={`bg-slate-700 border-slate-600 text-white ${!selectedCity ? 'border-red-500/50' : ''}`}>
|
|
|
- <SelectValue placeholder="Select a city" />
|
|
|
+ <SelectValue placeholder={t('integrations.woocommerceConnect.selectCityPlaceholder')} />
|
|
|
</SelectTrigger>
|
|
|
<SelectContent className="bg-slate-700 border-slate-600">
|
|
|
{cities.map((city) => (
|
|
|
@@ -496,7 +498,7 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
) : (
|
|
|
<div className="bg-yellow-500/10 border border-yellow-500/30 rounded-md p-3">
|
|
|
<p className="text-sm text-yellow-400">
|
|
|
- No cities with available phone numbers in this country.
|
|
|
+ {t('integrations.woocommerceConnect.noCitiesError')}
|
|
|
</p>
|
|
|
</div>
|
|
|
)}
|
|
|
@@ -507,18 +509,18 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
{selectedCity && (
|
|
|
<div className="space-y-2">
|
|
|
<Label className="text-slate-300">
|
|
|
- Phone Number <span className="text-red-400">*</span>
|
|
|
+ {t('integrations.woocommerceConnect.phoneNumberLabel')} <span className="text-red-400">{t('integrations.woocommerceConnect.countryRequired')}</span>
|
|
|
</Label>
|
|
|
{loadingPhoneNumbers ? (
|
|
|
<div className="flex items-center justify-center py-3">
|
|
|
<Loader2 className="w-5 h-5 text-cyan-500 animate-spin" />
|
|
|
- <span className="ml-2 text-sm text-slate-400">Loading phone numbers...</span>
|
|
|
+ <span className="ml-2 text-sm text-slate-400">{t('integrations.woocommerceConnect.loadingPhoneNumbers')}</span>
|
|
|
</div>
|
|
|
) : phoneNumbers.length > 0 ? (
|
|
|
<>
|
|
|
<Select value={selectedPhoneNumber} onValueChange={setSelectedPhoneNumber} disabled={isConnecting}>
|
|
|
<SelectTrigger className={`bg-slate-700 border-slate-600 text-white ${!selectedPhoneNumber ? 'border-red-500/50' : ''} ${phoneNumberError ? 'border-red-500' : ''}`}>
|
|
|
- <SelectValue placeholder="Select a phone number" />
|
|
|
+ <SelectValue placeholder={t('integrations.woocommerceConnect.selectPhonePlaceholder')} />
|
|
|
</SelectTrigger>
|
|
|
<SelectContent className="bg-slate-700 border-slate-600">
|
|
|
{phoneNumbers.map((phone) => (
|
|
|
@@ -526,7 +528,7 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
<div className="flex items-center justify-between w-full">
|
|
|
<span>{phone.phone_number}</span>
|
|
|
<span className="ml-2 text-sm text-slate-400">
|
|
|
- {phone.price > 0 ? `$${phone.price}/mo` : 'Free'}
|
|
|
+ {phone.price > 0 ? t('integrations.woocommerceConnect.perMonth', { price: phone.price }) : t('integrations.woocommerceConnect.free')}
|
|
|
</span>
|
|
|
</div>
|
|
|
</SelectItem>
|
|
|
@@ -540,7 +542,7 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
) : (
|
|
|
<div className="bg-red-500/10 border border-red-500/30 rounded-md p-3">
|
|
|
<p className="text-sm text-red-400">
|
|
|
- No phone numbers available in this city.
|
|
|
+ {t('integrations.woocommerceConnect.noPhoneNumbersError')}
|
|
|
</p>
|
|
|
</div>
|
|
|
)}
|
|
|
@@ -550,7 +552,7 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
{/* Show message when not all selections made */}
|
|
|
{!selectedPhoneNumber && countries.length > 0 && (
|
|
|
<p className="text-xs text-slate-400">
|
|
|
- Please select a country, city, and phone number to continue.
|
|
|
+ {t('integrations.woocommerceConnect.selectionRequired')}
|
|
|
</p>
|
|
|
)}
|
|
|
</div>
|
|
|
@@ -564,12 +566,12 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
{isConnecting ? (
|
|
|
<>
|
|
|
<Loader2 className="w-4 h-4 mr-2 animate-spin" />
|
|
|
- Connecting...
|
|
|
+ {t('integrations.woocommerceConnect.connecting')}
|
|
|
</>
|
|
|
) : (
|
|
|
<>
|
|
|
<Key className="w-4 h-4 mr-2" />
|
|
|
- Connect WooCommerce Store
|
|
|
+ {t('integrations.woocommerceConnect.connectButton')}
|
|
|
</>
|
|
|
)}
|
|
|
</Button>
|
|
|
@@ -577,44 +579,44 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
<div className="bg-blue-500/10 border border-blue-500/50 rounded-lg p-4 space-y-3">
|
|
|
<h4 className="text-white font-medium flex items-center gap-2">
|
|
|
<ExternalLink className="w-4 h-4 text-blue-500" />
|
|
|
- How to generate WooCommerce API keys
|
|
|
+ {t('integrations.woocommerceConnect.howToGenerateKeys')}
|
|
|
</h4>
|
|
|
<ol className="space-y-2 text-sm text-slate-300">
|
|
|
<li className="flex items-start gap-2">
|
|
|
<span className="text-blue-500 font-semibold min-w-[20px]">1.</span>
|
|
|
- <span>Log into your WooCommerce admin panel</span>
|
|
|
+ <span>{t('integrations.woocommerceConnect.keyStep1')}</span>
|
|
|
</li>
|
|
|
<li className="flex items-start gap-2">
|
|
|
<span className="text-blue-500 font-semibold min-w-[20px]">2.</span>
|
|
|
- <span>Navigate to <strong>WooCommerce → Settings → Advanced → REST API</strong></span>
|
|
|
+ <span dangerouslySetInnerHTML={{ __html: t('integrations.woocommerceConnect.keyStep2') }} />
|
|
|
</li>
|
|
|
<li className="flex items-start gap-2">
|
|
|
<span className="text-blue-500 font-semibold min-w-[20px]">3.</span>
|
|
|
- <span>Click <strong>"Add key"</strong> button</span>
|
|
|
+ <span dangerouslySetInnerHTML={{ __html: t('integrations.woocommerceConnect.keyStep3') }} />
|
|
|
</li>
|
|
|
<li className="flex items-start gap-2">
|
|
|
<span className="text-blue-500 font-semibold min-w-[20px]">4.</span>
|
|
|
- <span>Fill in the form:
|
|
|
+ <span>{t('integrations.woocommerceConnect.keyStep4')}
|
|
|
<ul className="ml-4 mt-1 space-y-1">
|
|
|
- <li>• Description: <code className="text-purple-400">ShopCall.ai</code></li>
|
|
|
- <li>• User: <em>(select your admin user)</em></li>
|
|
|
- <li>• Permissions: <code className="text-purple-400">Read</code></li>
|
|
|
+ <li>• Description: <code className="text-purple-400">{t('integrations.woocommerceConnect.keyStep4Description')}</code></li>
|
|
|
+ <li>• User: <em>{t('integrations.woocommerceConnect.keyStep4User')}</em></li>
|
|
|
+ <li>• Permissions: <code className="text-purple-400">{t('integrations.woocommerceConnect.keyStep4Permissions')}</code></li>
|
|
|
</ul>
|
|
|
</span>
|
|
|
</li>
|
|
|
<li className="flex items-start gap-2">
|
|
|
<span className="text-blue-500 font-semibold min-w-[20px]">5.</span>
|
|
|
- <span>Click <strong>"Generate API key"</strong></span>
|
|
|
+ <span dangerouslySetInnerHTML={{ __html: t('integrations.woocommerceConnect.keyStep5') }} />
|
|
|
</li>
|
|
|
<li className="flex items-start gap-2">
|
|
|
<span className="text-blue-500 font-semibold min-w-[20px]">6.</span>
|
|
|
- <span>Copy both the <strong>Consumer Key</strong> and <strong>Consumer Secret</strong></span>
|
|
|
+ <span dangerouslySetInnerHTML={{ __html: t('integrations.woocommerceConnect.keyStep6') }} />
|
|
|
</li>
|
|
|
</ol>
|
|
|
<Alert className="bg-yellow-500/10 border-yellow-500/50 mt-3">
|
|
|
<AlertCircle className="h-4 w-4 text-yellow-500" />
|
|
|
<AlertDescription className="text-yellow-500 text-xs">
|
|
|
- Important: WooCommerce shows the Consumer Secret only once! Make sure to copy it before closing the page.
|
|
|
+ {t('integrations.woocommerceConnect.keyWarning')}
|
|
|
</AlertDescription>
|
|
|
</Alert>
|
|
|
</div>
|
|
|
@@ -625,11 +627,9 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
<div className="flex items-start gap-2">
|
|
|
<CheckCircle2 className="w-5 h-5 text-blue-500 mt-0.5 flex-shrink-0" />
|
|
|
<div className="space-y-1">
|
|
|
- <h4 className="text-white font-medium">Secure Connection</h4>
|
|
|
+ <h4 className="text-white font-medium">{t('integrations.woocommerceConnect.securityTitle')}</h4>
|
|
|
<p className="text-sm text-slate-300">
|
|
|
- ShopCall.ai uses WooCommerce REST API with read-only access to your store data.
|
|
|
- Your API credentials are encrypted and stored securely. We never have access to your
|
|
|
- WordPress admin password. All connections use HTTPS for maximum security.
|
|
|
+ {t('integrations.woocommerceConnect.securityDescription')}
|
|
|
</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -637,36 +637,35 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
|
|
|
{/* Required Permissions */}
|
|
|
<div className="bg-slate-700/50 rounded-lg p-4 space-y-3">
|
|
|
- <h4 className="text-white font-medium">Required Permissions (Read-only)</h4>
|
|
|
+ <h4 className="text-white font-medium">{t('integrations.woocommerceConnect.permissionsTitle')}</h4>
|
|
|
<div className="grid grid-cols-2 gap-2 text-sm text-slate-300">
|
|
|
<div className="flex items-center gap-2">
|
|
|
<CheckCircle2 className="w-4 h-4 text-green-500" />
|
|
|
- <span>Read Products</span>
|
|
|
+ <span>{t('integrations.woocommerceConnect.readProducts')}</span>
|
|
|
</div>
|
|
|
<div className="flex items-center gap-2">
|
|
|
<CheckCircle2 className="w-4 h-4 text-green-500" />
|
|
|
- <span>Read Orders</span>
|
|
|
+ <span>{t('integrations.woocommerceConnect.readOrders')}</span>
|
|
|
</div>
|
|
|
<div className="flex items-center gap-2">
|
|
|
<CheckCircle2 className="w-4 h-4 text-green-500" />
|
|
|
- <span>Read Customers</span>
|
|
|
+ <span>{t('integrations.woocommerceConnect.readCustomers')}</span>
|
|
|
</div>
|
|
|
<div className="flex items-center gap-2">
|
|
|
<CheckCircle2 className="w-4 h-4 text-green-500" />
|
|
|
- <span>Read Coupons</span>
|
|
|
+ <span>{t('integrations.woocommerceConnect.readCoupons')}</span>
|
|
|
</div>
|
|
|
<div className="flex items-center gap-2">
|
|
|
<CheckCircle2 className="w-4 h-4 text-green-500" />
|
|
|
- <span>Read Reports</span>
|
|
|
+ <span>{t('integrations.woocommerceConnect.readReports')}</span>
|
|
|
</div>
|
|
|
<div className="flex items-center gap-2">
|
|
|
<CheckCircle2 className="w-4 h-4 text-green-500" />
|
|
|
- <span>View Settings</span>
|
|
|
+ <span>{t('integrations.woocommerceConnect.viewSettings')}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<p className="text-xs text-slate-400">
|
|
|
- These read-only permissions allow our AI to access your store data and provide accurate,
|
|
|
- personalized customer support without modifying anything.
|
|
|
+ {t('integrations.woocommerceConnect.permissionsNote')}
|
|
|
</p>
|
|
|
</div>
|
|
|
|
|
|
@@ -678,7 +677,7 @@ export function WooCommerceConnect({ onClose }: WooCommerceConnectProps) {
|
|
|
className="w-full border-slate-600 text-slate-300 hover:bg-slate-700"
|
|
|
disabled={isConnecting}
|
|
|
>
|
|
|
- Cancel
|
|
|
+ {t('integrations.woocommerceConnect.cancel')}
|
|
|
</Button>
|
|
|
)}
|
|
|
</CardContent>
|