From 2543d6751ed865177531f9fdecb77926fb4794fd Mon Sep 17 00:00:00 2001 From: piumal1999 Date: Fri, 26 Aug 2022 23:16:59 +0530 Subject: [PATCH 1/2] O3-1465: Disable subscribe to snapshot option when version is provided --- .../subscription/subscription.component.tsx | 25 ++++++++++++++++- .../esm-admin-openconceptlab-app/src/utils.ts | 28 +++++++++++++++++++ .../translations/en.json | 1 + 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 packages/esm-admin-openconceptlab-app/src/utils.ts diff --git a/packages/esm-admin-openconceptlab-app/src/subscription/subscription.component.tsx b/packages/esm-admin-openconceptlab-app/src/subscription/subscription.component.tsx index 696db66..b11969f 100644 --- a/packages/esm-admin-openconceptlab-app/src/subscription/subscription.component.tsx +++ b/packages/esm-admin-openconceptlab-app/src/subscription/subscription.component.tsx @@ -18,6 +18,7 @@ import { useTranslation } from 'react-i18next'; import { deleteSubscription, updateSubscription, useSubscription } from './subscription.resource'; import styles from './subscription.component.scss'; import { useSWRConfig } from 'swr'; +import { isVersionDefinedInUrl } from '../utils'; const Subscription: React.FC = () => { const { t } = useTranslation(); @@ -26,6 +27,7 @@ const Subscription: React.FC = () => { const [token, setToken] = useState(''); const [isSubscribedToSnapshot, setIsSubscribedToSnapshot] = useState(false); const [validationType, setValidationType] = useState<'NONE' | 'FULL'>('FULL'); + const [isSnapshotOptionDisabled, setIsSnapshotOptionDisabled] = useState(false); const { data: subscription, isLoading, isError } = useSubscription(); @@ -35,11 +37,18 @@ const Subscription: React.FC = () => { setToken(subscription?.token || ''); setIsSubscribedToSnapshot(subscription?.subscribedToSnapshot || false); setValidationType(subscription?.validationType || 'FULL'); + setIsSnapshotOptionDisabled(subscription ? isVersionDefinedInUrl(subscription.url) : false); } }, [isLoading, isError, subscription]); const handleChangeSubscriptionUrl = useCallback((event: React.ChangeEvent) => { setSubscriptionUrl(event.target.value); + if (isVersionDefinedInUrl(event.target.value)) { + setIsSnapshotOptionDisabled(true); + setIsSubscribedToSnapshot(false); + } else { + setIsSnapshotOptionDisabled(false); + } }, []); const handleChangeToken = useCallback((event: React.ChangeEvent) => { @@ -59,6 +68,17 @@ const Subscription: React.FC = () => { evt.preventDefault(); evt.stopPropagation(); + if (isSnapshotOptionDisabled && isSubscribedToSnapshot) { + showNotification({ + kind: 'error', + description: t( + 'snapshotDisabledError', + "You cannot subscribe to a SNAPSHOT if you've provided the collection version", + ), + }); + return; + } + const abortController = new AbortController(); const updatedSubscription = { @@ -92,7 +112,7 @@ const Subscription: React.FC = () => { return () => abortController.abort(); }, - [subscriptionUrl, token, validationType, isSubscribedToSnapshot, t, subscription, mutate], + [subscriptionUrl, token, validationType, isSubscribedToSnapshot, isSnapshotOptionDisabled, subscription, t, mutate], ); const handleCancel = useCallback(() => { @@ -100,6 +120,7 @@ const Subscription: React.FC = () => { setToken(subscription?.token || ''); setIsSubscribedToSnapshot(subscription?.subscribedToSnapshot || false); setValidationType(subscription?.validationType || 'FULL'); + setIsSnapshotOptionDisabled(subscription ? isVersionDefinedInUrl(subscription.url) : false); showNotification({ kind: 'info', @@ -121,6 +142,7 @@ const Subscription: React.FC = () => { setToken(''); setIsSubscribedToSnapshot(false); setValidationType('FULL'); + setIsSnapshotOptionDisabled(false); showNotification({ kind: 'success', description: t('subscriptionDeleted', 'Successfully unsubscribed'), @@ -205,6 +227,7 @@ const Subscription: React.FC = () => { onChange={handleChangeSubscriptionType} labelText={t('subscribeToSnapshotText', 'Subscribe to SNAPSHOT versions (not recommended)')} id="isSubscribedToSnapshot" + disabled={isSnapshotOptionDisabled} /> { + if (subscriptionUrl.endsWith('/')) { + subscriptionUrl = subscriptionUrl.substring(0, subscriptionUrl.lastIndexOf('/')); + } + + let url; + try { + url = new URL(subscriptionUrl); + } catch (e) { + return false; + } + + let subUrlAfterBaseUrl = url.pathname; + let count = subUrlAfterBaseUrl.length - subUrlAfterBaseUrl.replace(/[\/\\]/g, '').length; + if (count == NUMBER_OF_SLASHES_AFTER_BASE_URL) { + return true; + } else { + return false; + } +}; diff --git a/packages/esm-admin-openconceptlab-app/translations/en.json b/packages/esm-admin-openconceptlab-app/translations/en.json index e62588e..b465e0b 100644 --- a/packages/esm-admin-openconceptlab-app/translations/en.json +++ b/packages/esm-admin-openconceptlab-app/translations/en.json @@ -37,6 +37,7 @@ "previousImportsFetchError": "Error occured while fetching the imports", "result": "Result:", "setupSubscription": "Setup Subscription", + "snapshotDisabledError": "You cannot subscribe to a SNAPSHOT if you've provided the collection version", "startedOn": "Started on", "status": "Status", "subscribeButton": "Save changes", From d2224209592a96a2b62ebdc4b9d887cd08389524 Mon Sep 17 00:00:00 2001 From: piumal1999 Date: Wed, 31 Aug 2022 00:39:52 +0530 Subject: [PATCH 2/2] Update url parts count logic --- packages/esm-admin-openconceptlab-app/src/utils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/esm-admin-openconceptlab-app/src/utils.ts b/packages/esm-admin-openconceptlab-app/src/utils.ts index 7ef40c4..b118e72 100644 --- a/packages/esm-admin-openconceptlab-app/src/utils.ts +++ b/packages/esm-admin-openconceptlab-app/src/utils.ts @@ -18,8 +18,7 @@ export const isVersionDefinedInUrl = (subscriptionUrl: string) => { return false; } - let subUrlAfterBaseUrl = url.pathname; - let count = subUrlAfterBaseUrl.length - subUrlAfterBaseUrl.replace(/[\/\\]/g, '').length; + let count = url.pathname.match(/\//g)?.length ?? 0; if (count == NUMBER_OF_SLASHES_AFTER_BASE_URL) { return true; } else {