import { ButtonGroup, Button, Box, ToggleSwitch, States, StatesIcon, StatesTitle, Accordion, AccordionItem, Field, FieldGroup, FieldLabel, FieldRow, FieldHint, Callout, Margins, } from '@rocket.chat/fuselage'; import { usePreferenceFeaturePreviewList, Page, PageHeader, PageScrollableContentWithShadow, PageFooter } from '@rocket.chat/ui-client'; import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { useToastMessageDispatch, useTranslation, useEndpoint } from '@rocket.chat/ui-contexts'; import type { ChangeEvent } from 'react'; import { useEffect, Fragment } from 'react'; import { useForm } from 'react-hook-form'; import { useFeaturePreviewEnableQuery } from '../../../hooks/useFeaturePreviewEnableQuery'; const AccountFeaturePreviewPage = () => { const t = useTranslation(); const dispatchToastMessage = useToastMessageDispatch(); const { features, unseenFeatures } = usePreferenceFeaturePreviewList(); const setUserPreferences = useEndpoint('POST', '/v1/users.setPreferences'); useEffect(() => { if (unseenFeatures) { const featuresPreview = features.map((feature) => ({ name: feature.name, value: feature.value, })); void setUserPreferences({ data: { featuresPreview } }); } }, [setUserPreferences, features, unseenFeatures]); const { watch, formState: { isDirty }, setValue, handleSubmit, reset, } = useForm({ defaultValues: { featuresPreview: features }, }); const { featuresPreview } = watch(); const handleSave = async () => { const featuresToBeSaved = featuresPreview.map((feature) => ({ name: feature.name, value: feature.value })); try { await setUserPreferences({ data: { featuresPreview: featuresToBeSaved } }); dispatchToastMessage({ type: 'success', message: t('Preferences_saved') }); } catch (error) { dispatchToastMessage({ type: 'error', message: error }); } finally { reset({ featuresPreview }); } }; const handleFeatures = (e: ChangeEvent) => { const updated = featuresPreview.map((item) => (item.name === e.target.name ? { ...item, value: e.target.checked } : item)); setValue('featuresPreview', updated, { shouldDirty: true }); }; const grouppedFeaturesPreview = useFeaturePreviewEnableQuery(featuresPreview); return ( {featuresPreview.length === 0 && ( {t('No_feature_to_preview')} )} {featuresPreview.length > 0 && ( <> {t('Feature_preview_page_description')} {t('Feature_preview_page_callout')} {grouppedFeaturesPreview?.map(([group, features], index) => ( {features.map((feature) => ( {t(feature.i18n)} {feature.description && {t(feature.description)}} {feature.imageUrl && ( )} ))} ))} )} ); }; export default AccountFeaturePreviewPage;