import * as React from 'react'; import { useForm, SubmitHandler } from 'react-hook-form'; import I18n from 'i18n-js'; import Box from '../../common/Box'; import SiteSettingsInfoBox from '../../common/SiteSettingsInfoBox'; import Button from '../../common/Button'; import HttpStatus from '../../../constants/http_status'; import { TENANT_SETTING_BRAND_DISPLAY_NAME_AND_LOGO, TENANT_SETTING_BRAND_DISPLAY_NAME_ONLY, TENANT_SETTING_BRAND_DISPLAY_LOGO_ONLY, TENANT_SETTING_BRAND_DISPLAY_NONE, TENANT_SETTING_COLLAPSE_BOARDS_IN_HEADER_NO_COLLAPSE, TENANT_SETTING_COLLAPSE_BOARDS_IN_HEADER_ALWAYS_COLLAPSE, } from '../../../interfaces/ITenantSetting'; import { DangerText, SmallMutedText } from '../../common/CustomTexts'; import { getLabel, getValidationMessage } from '../../../helpers/formUtils'; import IBoardJSON from '../../../interfaces/json/IBoard'; import ActionLink from '../../common/ActionLink'; import { LearnMoreIcon } from '../../common/Icons'; export interface ISiteSettingsGeneralForm { siteName: string; siteLogo: string; brandDisplaySetting: string; locale: string; showVoteCount: boolean; showVoteButtonInBoard: boolean; showPoweredBy: boolean; rootBoardId?: string; customDomain?: string; showRoadmapInHeader: boolean; collapseBoardsInHeader: string; } interface Props { originForm: ISiteSettingsGeneralForm; boards: IBoardJSON[]; authenticityToken: string; areUpdating: boolean; error: string; updateTenant( siteName: string, siteLogo: string, brandDisplaySetting: string, locale: string, rootBoardId: number, customDomain: string, showRoadmapInHeader: boolean, collapseBoardsInHeader: string, showVoteCount: boolean, showVoteButtonInBoard: boolean, showPoweredBy: boolean, authenticityToken: string ): Promise; } const GeneralSiteSettingsP = ({ originForm, boards, authenticityToken, areUpdating, error, updateTenant, }: Props) => { const { register, handleSubmit, formState: { isDirty, isSubmitSuccessful, errors }, watch, } = useForm({ defaultValues: { siteName: originForm.siteName, siteLogo: originForm.siteLogo, brandDisplaySetting: originForm.brandDisplaySetting, locale: originForm.locale, showVoteCount: originForm.showVoteCount, showVoteButtonInBoard: originForm.showVoteButtonInBoard, showPoweredBy: originForm.showPoweredBy, rootBoardId: originForm.rootBoardId, customDomain: originForm.customDomain, showRoadmapInHeader: originForm.showRoadmapInHeader, collapseBoardsInHeader: originForm.collapseBoardsInHeader, }, }); const onSubmit: SubmitHandler = data => { updateTenant( data.siteName, data.siteLogo, data.brandDisplaySetting, data.locale, Number(data.rootBoardId), data.customDomain, data.showRoadmapInHeader, data.collapseBoardsInHeader, data.showVoteCount, data.showVoteButtonInBoard, data.showPoweredBy, authenticityToken ).then(res => { if (res?.status !== HttpStatus.OK) return; window.location.reload(); }); }; const customDomain = watch('customDomain'); return ( <>

{ I18n.t('site_settings.general.title') }

{errors.siteName && getValidationMessage(errors.siteName.type, 'tenant', 'site_name')}
{ originForm.customDomain !== customDomain && customDomain !== '' &&
{ I18n.t('site_settings.general.custom_domain_help', { domain: customDomain }) } window.open('https://docs.astuto.io/custom-domain', '_blank')} icon={} > {I18n.t('site_settings.general.custom_domain_learn_more')}
}

{ I18n.t('site_settings.general.subtitle_header') }



{ I18n.t('site_settings.general.subtitle_visibility') }

{ I18n.t('site_settings.general.show_vote_count_help') }

{ I18n.t('site_settings.general.show_vote_button_in_board_help') }


); } export default GeneralSiteSettingsP;