import { ButtonGroup, Button, Box, ToggleSwitch, Accordion, AccordionItem, Field, FieldGroup, FieldLabel, FieldRow, FieldHint, Callout, Margins, } from '@rocket.chat/fuselage'; import { useDefaultSettingFeaturePreviewList, Page, PageHeader, PageScrollableContentWithShadow, PageFooter } from '@rocket.chat/ui-client'; import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { useToastMessageDispatch, useTranslation, useSettingsDispatch } from '@rocket.chat/ui-contexts'; import type { ChangeEvent } from 'react'; import { Fragment } from 'react'; import { useForm } from 'react-hook-form'; import { useFeaturePreviewEnableQuery } from '../../../hooks/useFeaturePreviewEnableQuery'; import { useEditableSetting } from '../EditableSettingsContext'; import Setting from '../settings/Setting'; import SettingsGroupPageSkeleton from '../settings/SettingsGroupPage/SettingsGroupPageSkeleton'; const AdminFeaturePreviewPage = () => { const t = useTranslation(); const dispatchToastMessage = useToastMessageDispatch(); const allowFeaturePreviewSetting = useEditableSetting('Accounts_AllowFeaturePreview'); const { features } = useDefaultSettingFeaturePreviewList(); const { watch, formState: { isDirty }, setValue, handleSubmit, reset, } = useForm({ defaultValues: { featuresPreview: features }, }); const { featuresPreview } = watch(); const dispatch = useSettingsDispatch(); const handleSave = async () => { try { const featuresToBeSaved = featuresPreview.map((feature) => ({ name: feature.name, value: feature.value })); await dispatch([ { _id: allowFeaturePreviewSetting!._id, value: allowFeaturePreviewSetting!.value }, { _id: 'Accounts_Default_User_Preferences_featuresPreview', value: JSON.stringify(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); if (!allowFeaturePreviewSetting) { // TODO: Implement FeaturePreviewSkeleton component return ; } return ( {t('Feature_preview_admin_page_description')} {t('Feature_preview_page_callout')} {t('Feature_preview_admin_page_callout')} {grouppedFeaturesPreview?.map(([group, features], index) => ( {features.map((feature) => ( {t(feature.i18n)} {feature.description && {t(feature.description)}} {feature.imageUrl && } ))} ))} ); }; export default AdminFeaturePreviewPage;