refactor: Normalize the usage of the `useSetting` hook (#33779)

Co-authored-by: Guilherme Gazzo <guilhermegazzo@gmail.com>
pull/33690/head^2
Tasso Evangelista 1 year ago committed by GitHub
parent 3bf45b13ad
commit 06189eb7ad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 14
      apps/meteor/app/assets/server/assets.ts
  2. 2
      apps/meteor/client/NavBarV2/NavBarSettingsToolbar/UserMenu/UserMenuButton.tsx
  3. 2
      apps/meteor/client/NavBarV2/NavBarSettingsToolbar/UserMenu/UserMenuHeader.tsx
  4. 2
      apps/meteor/client/components/GazzodownText.tsx
  5. 2
      apps/meteor/client/components/GenericUpsellModal/hooks/useUpsellActions.ts
  6. 2
      apps/meteor/client/components/Omnichannel/OmnichannelSortingDisclaimer.tsx
  7. 6
      apps/meteor/client/components/Omnichannel/modals/CloseChatModal.tsx
  8. 2
      apps/meteor/client/components/Omnichannel/modals/ForwardChatModal.tsx
  9. 2
      apps/meteor/client/components/UserStatusMenu.tsx
  10. 2
      apps/meteor/client/components/message/content/location/MapView.tsx
  11. 2
      apps/meteor/client/components/message/hooks/useNormalizedMessage.ts
  12. 2
      apps/meteor/client/components/message/hooks/useOembedLayout.ts
  13. 2
      apps/meteor/client/components/message/toolbar/useWebDAVMessageAction.tsx
  14. 2
      apps/meteor/client/hooks/roomActions/useWebRTCVideoRoomAction.ts
  15. 2
      apps/meteor/client/hooks/useFormatDateAndTime.ts
  16. 2
      apps/meteor/client/hooks/useFormatTime.ts
  17. 6
      apps/meteor/client/hooks/usePruneWarningMessage.ts
  18. 4
      apps/meteor/client/hooks/useTimeAgo.ts
  19. 2
      apps/meteor/client/hooks/useVoipClient.ts
  20. 4
      apps/meteor/client/providers/AuthenticationProvider/AuthenticationProvider.tsx
  21. 4
      apps/meteor/client/providers/AuthenticationProvider/hooks/useLDAPAndCrowdCollisionWarning.tsx
  22. 2
      apps/meteor/client/providers/LayoutProvider.tsx
  23. 15
      apps/meteor/client/providers/OmnichannelProvider.tsx
  24. 2
      apps/meteor/client/providers/TranslationProvider.tsx
  25. 2
      apps/meteor/client/providers/UserPresenceProvider.tsx
  26. 2
      apps/meteor/client/providers/UserProvider/hooks/useEmailVerificationWarning.tsx
  27. 2
      apps/meteor/client/sidebar/footer/SidebarFooterDefault.tsx
  28. 2
      apps/meteor/client/sidebar/header/CreateChannel/CreateChannelModal.tsx
  29. 2
      apps/meteor/client/sidebar/header/CreateDirectMessage.tsx
  30. 2
      apps/meteor/client/sidebar/header/UserAvatarWithStatus.tsx
  31. 2
      apps/meteor/client/sidebar/header/UserMenuHeader.tsx
  32. 2
      apps/meteor/client/sidebar/sections/BannerSection.tsx
  33. 2
      apps/meteor/client/sidebarv2/footer/SidebarFooterDefault.tsx
  34. 2
      apps/meteor/client/sidebarv2/header/CreateChannelModal.tsx
  35. 2
      apps/meteor/client/sidebarv2/header/CreateDirectMessage.tsx
  36. 2
      apps/meteor/client/sidebarv2/sections/BannerSection.tsx
  37. 2
      apps/meteor/client/views/account/integrations/AccountIntegrationsRoute.tsx
  38. 2
      apps/meteor/client/views/account/omnichannel/OmnichannelPreferencesPage.tsx
  39. 14
      apps/meteor/client/views/account/profile/useAccountProfileSettings.ts
  40. 24
      apps/meteor/client/views/admin/EditableSettingsContext.ts
  41. 2
      apps/meteor/client/views/admin/customUserStatus/CustomUserStatusRoute.tsx
  42. 2
      apps/meteor/client/views/admin/customUserStatus/CustomUserStatusService.tsx
  43. 2
      apps/meteor/client/views/admin/import/NewImportPage.tsx
  44. 2
      apps/meteor/client/views/admin/moderation/MessageReportInfo.tsx
  45. 2
      apps/meteor/client/views/admin/moderation/helpers/ContextMessage.tsx
  46. 8
      apps/meteor/client/views/admin/settings/EditableSettingsProvider.tsx
  47. 4
      apps/meteor/client/views/admin/settings/SettingsGroupSelector/SettingsGroupSelector.tsx
  48. 2
      apps/meteor/client/views/admin/users/AdminUserForm.tsx
  49. 6
      apps/meteor/client/views/admin/users/AdminUserSetRandomPasswordContent.tsx
  50. 2
      apps/meteor/client/views/admin/users/voip/hooks/useVoipExtensionPermission.tsx
  51. 2
      apps/meteor/client/views/directory/DirectoryPage.tsx
  52. 2
      apps/meteor/client/views/home/CustomHomePageContent.tsx
  53. 4
      apps/meteor/client/views/home/DefaultHomePage.tsx
  54. 2
      apps/meteor/client/views/home/HomePageHeader.tsx
  55. 6
      apps/meteor/client/views/home/cards/CustomContentCard.tsx
  56. 2
      apps/meteor/client/views/marketplace/components/BannerEnterpriseTrialEnded.tsx
  57. 2
      apps/meteor/client/views/oauth/components/CurrentUserDisplay.tsx
  58. 2
      apps/meteor/client/views/oauth/components/Layout.tsx
  59. 4
      apps/meteor/client/views/omnichannel/ExternalFrameContainer.tsx
  60. 2
      apps/meteor/client/views/omnichannel/contactHistory/MessageList/ContactHistoryMessagesList.tsx
  61. 5
      apps/meteor/client/views/omnichannel/installation/Installation.tsx
  62. 2
      apps/meteor/client/views/outlookCalendar/OutlookEventsList/OutlookEventsList.tsx
  63. 2
      apps/meteor/client/views/room/Header/Header.tsx
  64. 2
      apps/meteor/client/views/room/HeaderV2/Header.tsx
  65. 2
      apps/meteor/client/views/room/MessageList/MessageList.tsx
  66. 2
      apps/meteor/client/views/room/MessageList/hooks/useAutoLinkDomains.ts
  67. 2
      apps/meteor/client/views/room/MessageList/hooks/useAutoTranslate.ts
  68. 6
      apps/meteor/client/views/room/MessageList/hooks/useKatex.ts
  69. 2
      apps/meteor/client/views/room/MessageList/hooks/useMessages.ts
  70. 6
      apps/meteor/client/views/room/MessageList/providers/MessageListProvider.tsx
  71. 2
      apps/meteor/client/views/room/UserCard/UserCardWithData.tsx
  72. 4
      apps/meteor/client/views/room/body/RoomBody.tsx
  73. 2
      apps/meteor/client/views/room/body/RoomBodyV2.tsx
  74. 2
      apps/meteor/client/views/room/body/RoomForeword/RoomForewordUsernameList.tsx
  75. 2
      apps/meteor/client/views/room/body/RoomTopic.tsx
  76. 2
      apps/meteor/client/views/room/body/hooks/useFileUploadDropTarget.ts
  77. 4
      apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
  78. 8
      apps/meteor/client/views/room/composer/messageBox/MessageBoxActionsToolbar/hooks/useAudioMessageAction.ts
  79. 2
      apps/meteor/client/views/room/composer/messageBox/MessageBoxActionsToolbar/hooks/useCreateDiscussionAction.tsx
  80. 2
      apps/meteor/client/views/room/composer/messageBox/MessageBoxActionsToolbar/hooks/useFileUploadAction.ts
  81. 2
      apps/meteor/client/views/room/composer/messageBox/MessageBoxActionsToolbar/hooks/useShareLocationAction.tsx
  82. 8
      apps/meteor/client/views/room/composer/messageBox/MessageBoxActionsToolbar/hooks/useVideoMessageAction.ts
  83. 2
      apps/meteor/client/views/room/composer/messageBox/MessageBoxActionsToolbar/hooks/useWebdavActions.tsx
  84. 2
      apps/meteor/client/views/room/composer/messageBox/MessageBoxReplies.tsx
  85. 2
      apps/meteor/client/views/room/contextualBar/Discussions/DiscussionsList.tsx
  86. 2
      apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx
  87. 2
      apps/meteor/client/views/room/contextualBar/MessageSearchTab/components/MessageSearch.tsx
  88. 2
      apps/meteor/client/views/room/contextualBar/RoomFiles/hooks/useMessageDeletionIsAllowed.ts
  89. 2
      apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.tsx
  90. 2
      apps/meteor/client/views/room/contextualBar/Threads/components/ThreadListItem.tsx
  91. 2
      apps/meteor/client/views/room/contextualBar/Threads/components/ThreadMessageList.tsx
  92. 2
      apps/meteor/client/views/room/contextualBar/VideoConference/VideoConfList/VideoConfListItem.tsx
  93. 2
      apps/meteor/client/views/room/hooks/useOpenRoom.ts
  94. 20
      apps/meteor/client/views/room/hooks/useRetentionPolicy.ts
  95. 2
      apps/meteor/client/views/room/modals/FileUploadModal/FileUploadModal.tsx
  96. 8
      apps/meteor/client/views/room/providers/ComposerPopupProvider.tsx
  97. 2
      apps/meteor/client/views/root/DocumentTitleWrapper.tsx
  98. 2
      apps/meteor/client/views/root/MainLayout/RegisterUsername.tsx
  99. 2
      apps/meteor/client/views/root/MainLayout/UsernameCheck.tsx
  100. 2
      apps/meteor/client/views/root/hooks/useGoogleTagManager.ts
  101. Some files were not shown because too many files have changed in this diff Show More

@ -374,14 +374,12 @@ export async function addAssetToSetting(asset: string, value: IRocketChatAsset,
defaultUrl: value.defaultUrl,
},
{
...{
type: 'asset',
group: 'Assets',
fileConstraints: value.constraints,
i18nLabel: value.label,
asset,
public: true,
},
type: 'asset',
group: 'Assets',
fileConstraints: value.constraints,
i18nLabel: value.label,
asset,
public: true,
...options,
},
);

@ -20,7 +20,7 @@ const UserMenuButton = forwardRef(function UserMenuButton(props: UserMenuButtonP
const user = useUser();
const { status = !user ? 'online' : 'offline', username, avatarETag } = user || anon;
const presenceDisabled = useSetting<boolean>('Presence_broadcast_disabled');
const presenceDisabled = useSetting('Presence_broadcast_disabled', false);
return (
<IconButton

@ -13,7 +13,7 @@ type UserMenuHeaderProps = { user: IUser };
const UserMenuHeader = ({ user }: UserMenuHeaderProps) => {
const { t } = useTranslation();
const presenceDisabled = useSetting<boolean>('Presence_broadcast_disabled');
const presenceDisabled = useSetting('Presence_broadcast_disabled', false);
const displayName = useUserDisplayName(user);
return (

@ -54,7 +54,7 @@ const GazzodownText = ({ mentions, channels, searchText, children }: GazzodownTe
const convertAsciiToEmoji = useUserPreference<boolean>('convertAsciiEmoji', true);
const useEmoji = Boolean(useUserPreference('useEmojis'));
const useRealName = Boolean(useSetting('UI_Use_Real_Name'));
const useRealName = useSetting('UI_Use_Real_Name', false);
const ownUserId = useUserId();
const showMentionSymbol = Boolean(useUserPreference<boolean>('mentionsWithSymbol'));

@ -10,7 +10,7 @@ const TALK_TO_SALES_URL = 'https://go.rocket.chat/i/contact-sales';
export const useUpsellActions = (hasLicenseModule = false) => {
const setModal = useSetModal();
const handleOpenLink = useExternalLink();
const cloudWorkspaceHadTrial = useSetting<boolean>('Cloud_Workspace_Had_Trial');
const cloudWorkspaceHadTrial = useSetting('Cloud_Workspace_Had_Trial', false);
const { data } = useIsEnterprise();
const shouldShowUpsell = !data?.isEnterprise || !hasLicenseModule;

@ -8,7 +8,7 @@ import { useOmnichannelEnterpriseEnabled } from '../../hooks/omnichannel/useOmni
export const useOmnichannelSortingDisclaimer = () => {
const isOmnichannelEnabled = useOmnichannelEnterpriseEnabled();
const sortingMechanism = useSetting<OmniSortingType>('Omnichannel_sorting_mechanism') || OmniSortingType.Timestamp;
const sortingMechanism = useSetting<OmniSortingType>('Omnichannel_sorting_mechanism', OmniSortingType.Timestamp);
const [{ [sortingMechanism]: type }] = useState({
[OmniSortingType.Priority]: 'Priorities',

@ -51,9 +51,9 @@ const CloseChatModal = ({
watch,
} = useForm();
const commentRequired = useSetting('Livechat_request_comment_when_closing_conversation') as boolean;
const alwaysSendTranscript = useSetting<boolean>('Livechat_transcript_send_always');
const customSubject = useSetting<string>('Livechat_transcript_email_subject');
const commentRequired = useSetting('Livechat_request_comment_when_closing_conversation', true);
const alwaysSendTranscript = useSetting('Livechat_transcript_send_always', false);
const customSubject = useSetting('Livechat_transcript_email_subject', '');
const [tagRequired, setTagRequired] = useState(false);
const tags = watch('tags');

@ -36,7 +36,7 @@ const ForwardChatModal = ({
}): ReactElement => {
const { t } = useTranslation();
const getUserData = useEndpoint('GET', '/v1/users.info');
const idleAgentsAllowedForForwarding = useSetting('Livechat_enabled_when_agent_idle') as boolean;
const idleAgentsAllowedForForwarding = useSetting('Livechat_enabled_when_agent_idle', true);
const {
getValues,

@ -24,7 +24,7 @@ const UserStatusMenu = ({
}: UserStatusMenuProps): ReactElement => {
const { t } = useTranslation();
const [status, setStatus] = useState(initialStatus);
const allowInvisibleStatus = useSetting('Accounts_AllowInvisibleStatusOption') as boolean;
const allowInvisibleStatus = useSetting('Accounts_AllowInvisibleStatusOption', true);
const options = useMemo(() => {
const renderOption = (status: UserStatusType, label: string): ReactElement => (

@ -11,7 +11,7 @@ type MapViewProps = {
};
const MapView = ({ latitude, longitude }: MapViewProps) => {
const googleMapsApiKey = useSetting<string>('MapView_GMapsAPIKey');
const googleMapsApiKey = useSetting('MapView_GMapsAPIKey', '');
const linkUrl = `https://maps.google.com/maps?daddr=${latitude},${longitude}`;

@ -65,7 +65,7 @@ export const useNormalizedMessage = <TMessage extends IMessage>(message: TMessag
const customDomains = useAutoLinkDomains();
const subscription = useSubscriptionFromMessageQuery(message).data ?? undefined;
const autoTranslateOptions = useAutoTranslate(subscription);
const showColors = useSetting<boolean>('HexColorPreview_Enabled');
const showColors = useSetting('HexColorPreview_Enabled', true);
return useMemo(() => {
const parseOptions: Options = {

@ -15,7 +15,7 @@ export const useOembedLayout = (): OembedLayout => {
very often, so this hook is not going to be re-evaluated very often either;
this is why we don't need to memoize the result or store it in a context
*/
const enabled = useSetting<boolean>('API_Embed', false);
const enabled = useSetting('API_Embed', false);
const { isMobile } = useLayout();
const maxWidth = isMobile ? ('100%' as const) : 368;

@ -7,7 +7,7 @@ import { useWebDAVAccountIntegrationsQuery } from '../../../hooks/webdav/useWebD
import SaveToWebdavModal from '../../../views/room/webdav/SaveToWebdavModal';
export const useWebDAVMessageAction = () => {
const enabled = useSetting<boolean>('Webdav_Integration_Enabled', false);
const enabled = useSetting('Webdav_Integration_Enabled', false);
const { data } = useWebDAVAccountIntegrationsQuery({ enabled });

@ -11,7 +11,7 @@ export const useWebRTCVideoRoomAction = () => {
const enabled = useSetting('WebRTC_Enabled', false);
const room = useRoom();
const federated = isRoomFederated(room);
const callProvider = useSetting<string>('Omnichannel_call_provider', 'default-provider');
const callProvider = useSetting('Omnichannel_call_provider', 'default-provider');
const allowed = enabled && callProvider === 'WebRTC' && room.servedBy;

@ -9,7 +9,7 @@ type UseFormatDateAndTimeParams = {
export const useFormatDateAndTime = ({ withSeconds }: UseFormatDateAndTimeParams = {}): ((input: MomentInput) => string) => {
const clockMode = useUserPreference('clockMode');
const format = useSetting('Message_TimeAndDateFormat') as string;
const format = useSetting('Message_TimeAndDateFormat', 'LLL');
return useCallback(
(time) => {

@ -6,7 +6,7 @@ const dayFormat = ['h:mm A', 'H:mm'] as const;
export const useFormatTime = (): ((input: moment.MomentInput) => string) => {
const clockMode = useUserPreference<1 | 2>('clockMode');
const format = useSetting('Message_TimeFormat') as string;
const format = useSetting('Message_TimeFormat', 'LT');
const sameDay = clockMode !== undefined ? dayFormat[clockMode - 1] : format;
return useCallback(

@ -84,12 +84,12 @@ export const usePruneWarningMessage = (room: IRoom) => {
const { maxAge, filesOnly, excludePinned } = retention;
const cronPrecision = String(useSetting('RetentionPolicy_Precision')) as CronPrecisionSetting;
const cronPrecision = useSetting<CronPrecisionSetting>('RetentionPolicy_Precision', '0');
const t = useTranslation();
const enableAdvancedCronTimer = Boolean(useSetting('RetentionPolicy_Advanced_Precision'));
const advancedCronTimer = String(useSetting('RetentionPolicy_Advanced_Precision_Cron'));
const enableAdvancedCronTimer = useSetting('RetentionPolicy_Advanced_Precision', false);
const advancedCronTimer = useSetting('RetentionPolicy_Advanced_Precision_Cron', '*/30 * * * *');
const message = getMessage({ filesOnly, excludePinned });

@ -8,7 +8,7 @@ const dayFormat = ['h:mm A', 'H:mm'] as const;
export const useTimeAgo = (): ((time: Date | number | string) => string) => {
const clockMode = useUserPreference<1 | 2>('clockMode');
const timeFormat = useSetting<string>('Message_TimeFormat', 'LT');
const timeFormat = useSetting('Message_TimeFormat', 'LT');
const format = clockMode !== undefined ? dayFormat[clockMode - 1] : timeFormat;
return useCallback(
(time) => {
@ -25,7 +25,7 @@ export const useTimeAgo = (): ((time: Date | number | string) => string) => {
export const useShortTimeAgo = (): ((time: Date | string | number) => string) => {
const clockMode = useUserPreference<1 | 2>('clockMode');
const timeFormat = useSetting('Message_TimeFormat') as string;
const timeFormat = useSetting('Message_TimeFormat', 'LT');
const format = clockMode !== undefined ? dayFormat[clockMode - 1] : timeFormat;
return useCallback(
(time) =>

@ -23,7 +23,7 @@ const isSignedResponse = (data: any): data is { result: string } => typeof data?
// Currently we only support the websocket connection and the SIP proxy connection being from the same host,
// we need to add a new setting for SIP proxy if we want to support different hosts for them.
export const useVoipClient = (): UseVoipClientResult => {
const settingVoipEnabled = Boolean(useSetting('VoIP_Enabled'));
const settingVoipEnabled = useSetting('VoIP_Enabled', false);
const [voipConnectorEnabled, setVoipConnectorEnabled] = useSafely(useState(true));

@ -15,8 +15,8 @@ type AuthenticationProviderProps = {
};
const AuthenticationProvider = ({ children }: AuthenticationProviderProps): ReactElement => {
const isLdapEnabled = useSetting<boolean>('LDAP_Enable');
const isCrowdEnabled = useSetting<boolean>('CROWD_Enable');
const isLdapEnabled = useSetting('LDAP_Enable', false);
const isCrowdEnabled = useSetting('CROWD_Enable', false);
const loginMethod: LoginMethods = (isLdapEnabled && 'loginWithLDAP') || (isCrowdEnabled && 'loginWithCrowd') || 'loginWithPassword';

@ -5,8 +5,8 @@ import { useEffect } from 'react';
import type { LoginMethods } from '../AuthenticationProvider';
export function useLDAPAndCrowdCollisionWarning() {
const isLdapEnabled = useSetting<boolean>('LDAP_Enable');
const isCrowdEnabled = useSetting<boolean>('CROWD_Enable');
const isLdapEnabled = useSetting('LDAP_Enable', false);
const isCrowdEnabled = useSetting('CROWD_Enable', false);
const loginMethod: LoginMethods = (isLdapEnabled && 'loginWithLDAP') || (isCrowdEnabled && 'loginWithCrowd') || 'loginWithPassword';

@ -15,7 +15,7 @@ type LayoutProviderProps = {
};
const LayoutProvider = ({ children }: LayoutProviderProps) => {
const showTopNavbarEmbeddedLayout = Boolean(useSetting('UI_Show_top_navbar_embedded_layout'));
const showTopNavbarEmbeddedLayout = useSetting('UI_Show_top_navbar_embedded_layout', false);
const [isCollapsed, setIsCollapsed] = useState(false);
const breakpoints = useBreakpoints(); // ["xs", "sm", "md", "lg", "xl", xxl"]
const [hiddenActions, setHiddenActions] = useState(hiddenActionsDefaultValue);

@ -1,7 +1,7 @@
import {
type IOmnichannelAgent,
type OmichannelRoutingConfig,
type OmnichannelSortingMechanismSettingType,
OmnichannelSortingMechanismSettingType,
type ILivechatInquiryRecord,
LivechatInquiryStatus,
} from '@rocket.chat/core-typings';
@ -42,11 +42,14 @@ type OmnichannelProviderProps = {
};
const OmnichannelProvider = ({ children }: OmnichannelProviderProps) => {
const omniChannelEnabled = useSetting('Livechat_enabled') as boolean;
const omnichannelRouting = useSetting('Livechat_Routing_Method');
const showOmnichannelQueueLink = useSetting('Livechat_show_queue_list_link') as boolean;
const omnichannelPoolMaxIncoming = useSetting<number>('Livechat_guest_pool_max_number_incoming_livechats_displayed') ?? 0;
const omnichannelSortingMechanism = useSetting('Omnichannel_sorting_mechanism') as OmnichannelSortingMechanismSettingType;
const omniChannelEnabled = useSetting('Livechat_enabled', true);
const omnichannelRouting = useSetting('Livechat_Routing_Method', 'Auto_Selection');
const showOmnichannelQueueLink = useSetting('Livechat_show_queue_list_link', false);
const omnichannelPoolMaxIncoming = useSetting('Livechat_guest_pool_max_number_incoming_livechats_displayed', 0);
const omnichannelSortingMechanism = useSetting<OmnichannelSortingMechanismSettingType>(
'Omnichannel_sorting_mechanism',
OmnichannelSortingMechanismSettingType.Timestamp,
);
const loggerRef = useRef(new ClientLogger('OmnichannelProvider'));
const hasAccess = usePermission('view-l-room');

@ -121,7 +121,7 @@ const useI18next = (lng: string): typeof i18next => {
};
const useAutoLanguage = () => {
const serverLanguage = useSetting<string>('Language');
const serverLanguage = useSetting('Language', '');
const browserLanguage = normalizeLanguage(window.navigator.userLanguage ?? window.navigator.language);
const defaultUserLanguage = browserLanguage || serverLanguage || 'en';

@ -10,7 +10,7 @@ type UserPresenceProviderProps = {
};
const UserPresenceProvider = ({ children }: UserPresenceProviderProps): ReactElement => {
const usePresenceDisabled = useSetting<boolean>('Presence_broadcast_disabled');
const usePresenceDisabled = useSetting('Presence_broadcast_disabled', false);
useEffect(() => {
Presence.setStatus(usePresenceDisabled ? 'disabled' : 'enabled');

@ -4,7 +4,7 @@ import { useRef, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
export function useEmailVerificationWarning(user: IUser | undefined) {
const emailVerificationEnabled = useSetting<boolean>('Accounts_EmailVerification') === true;
const emailVerificationEnabled = useSetting('Accounts_EmailVerification', false);
const dispatchToastMessage = useToastMessageDispatch();
const { t } = useTranslation();

@ -9,7 +9,7 @@ import { SidebarFooterWatermark } from './SidebarFooterWatermark';
const SidebarFooterDefault = (): ReactElement => {
const [, , theme] = useThemeMode();
const logo = String(useSetting(theme === 'dark' ? 'Layout_Sidenav_Footer_Dark' : 'Layout_Sidenav_Footer')).trim();
const logo = useSetting(theme === 'dark' ? 'Layout_Sidenav_Footer_Dark' : 'Layout_Sidenav_Footer', '').trim();
const sidebarFooterStyle = css`
& img {

@ -69,7 +69,7 @@ const CreateChannelModal = ({ teamId = '', mainRoom, onClose, reload }: CreateCh
const e2eEnabled = useSetting('E2E_Enable');
const namesValidation = useSetting('UTF8_Channel_Names_Validation');
const allowSpecialNames = useSetting('UI_Allow_room_names_with_special_chars');
const federationEnabled = useSetting<boolean>('Federation_Matrix_enabled') || false;
const federationEnabled = useSetting('Federation_Matrix_enabled', false);
const e2eEnabledForPrivateByDefault = useSetting('E2E_Enabled_Default_PrivateRooms') && e2eEnabled;
const canCreateChannel = usePermission('create-c');

@ -11,7 +11,7 @@ import { goToRoomById } from '../../lib/utils/goToRoomById';
const CreateDirectMessage = ({ onClose }: { onClose: () => void }) => {
const t = useTranslation();
const directMaxUsers = useSetting<number>('DirectMesssage_maxUsers') || 1;
const directMaxUsers = useSetting('DirectMesssage_maxUsers', 1);
const membersFieldId = useUniqueId();
const dispatchToastMessage = useToastMessageDispatch();

@ -21,7 +21,7 @@ const anon = {
const UserAvatarWithStatus = () => {
const user = useUser();
const presenceDisabled = useSetting<boolean>('Presence_broadcast_disabled');
const presenceDisabled = useSetting('Presence_broadcast_disabled', false);
const { status = !user ? 'online' : 'offline', username, avatarETag } = user || anon;

@ -11,7 +11,7 @@ import { useUserDisplayName } from '../../hooks/useUserDisplayName';
const UserMenuHeader = ({ user }: { user: IUser }) => {
const { t } = useTranslation();
const presenceDisabled = useSetting<boolean>('Presence_broadcast_disabled');
const presenceDisabled = useSetting('Presence_broadcast_disabled', false);
const displayName = useUserDisplayName(user);
return (

@ -11,7 +11,7 @@ const BannerSection = () => {
const isAdmin = useRole('admin');
const [bannerDismissed, setBannerDismissed] = useSessionStorage('presence_cap_notifier', false);
const presenceDisabled = useSetting<boolean>('Presence_broadcast_disabled');
const presenceDisabled = useSetting('Presence_broadcast_disabled', false);
if ((isWarning || isRestricted) && isAdmin) {
return <AirGappedRestrictionBanner isRestricted={isRestricted} remainingDays={remainingDays} />;

@ -9,7 +9,7 @@ import { SidebarFooterWatermark } from './SidebarFooterWatermark';
const SidebarFooterDefault = (): ReactElement => {
const [, , theme] = useThemeMode();
const logo = String(useSetting(theme === 'dark' ? 'Layout_Sidenav_Footer_Dark' : 'Layout_Sidenav_Footer')).trim();
const logo = useSetting(theme === 'dark' ? 'Layout_Sidenav_Footer_Dark' : 'Layout_Sidenav_Footer', '').trim();
const sidebarFooterStyle = css`
& img {

@ -67,7 +67,7 @@ const CreateChannelModal = ({ teamId = '', onClose, reload }: CreateChannelModal
const e2eEnabled = useSetting('E2E_Enable');
const namesValidation = useSetting('UTF8_Channel_Names_Validation');
const allowSpecialNames = useSetting('UI_Allow_room_names_with_special_chars');
const federationEnabled = useSetting<boolean>('Federation_Matrix_enabled') || false;
const federationEnabled = useSetting('Federation_Matrix_enabled', false);
const e2eEnabledForPrivateByDefault = useSetting('E2E_Enabled_Default_PrivateRooms') && e2eEnabled;
const canCreateChannel = usePermission('create-c');

@ -13,7 +13,7 @@ type CreateDirectMessageProps = { onClose: () => void };
const CreateDirectMessage = ({ onClose }: CreateDirectMessageProps) => {
const t = useTranslation();
const directMaxUsers = useSetting<number>('DirectMesssage_maxUsers') || 1;
const directMaxUsers = useSetting('DirectMesssage_maxUsers', 1);
const membersFieldId = useUniqueId();
const dispatchToastMessage = useToastMessageDispatch();

@ -11,7 +11,7 @@ const BannerSection = () => {
const isAdmin = useRole('admin');
const [bannerDismissed, setBannerDismissed] = useSessionStorage('presence_cap_notifier', false);
const presenceDisabled = useSetting<boolean>('Presence_broadcast_disabled');
const presenceDisabled = useSetting('Presence_broadcast_disabled', false);
if ((isWarning || isRestricted) && isAdmin) {
return <AirGappedRestrictionBanner isRestricted={isRestricted} remainingDays={remainingDays} />;

@ -6,7 +6,7 @@ import NotAuthorizedPage from '../../notAuthorized/NotAuthorizedPage';
import AccountIntegrationsPage from './AccountIntegrationsPage';
const AccountIntegrationsRoute = (): ReactElement => {
const webdavEnabled = useSetting<boolean>('Webdav_Integration_Enabled', false);
const webdavEnabled = useSetting('Webdav_Integration_Enabled', false);
if (!webdavEnabled) {
return <NotAuthorizedPage />;

@ -17,7 +17,7 @@ const OmnichannelPreferencesPage = (): ReactElement => {
const t = useTranslation();
const dispatchToastMessage = useToastMessageDispatch();
const alwaysSendEmailTranscript = useSetting<boolean>('Livechat_transcript_send_always');
const alwaysSendEmailTranscript = useSetting('Livechat_transcript_send_always', false);
const omnichannelTranscriptPDF = useUserPreference<boolean>('omnichannelTranscriptPDF') ?? false;
const omnichannelTranscriptEmail = useUserPreference<boolean>('omnichannelTranscriptEmail') ?? false;
const omnichannelHideConversationAfterClosing = useUserPreference<boolean>('omnichannelHideConversationAfterClosing') ?? true;

@ -2,14 +2,14 @@ import { useSetting } from '@rocket.chat/ui-contexts';
import { useMemo } from 'react';
export const useAccountProfileSettings = () => {
const allowRealNameChange = useSetting('Accounts_AllowRealNameChange');
const allowUserStatusMessageChange = useSetting('Accounts_AllowUserStatusMessageChange');
const canChangeUsername = useSetting('Accounts_AllowUsernameChange');
const allowEmailChange = useSetting('Accounts_AllowEmailChange');
const allowRealNameChange = useSetting('Accounts_AllowRealNameChange', true);
const allowUserStatusMessageChange = useSetting('Accounts_AllowUserStatusMessageChange', true);
const canChangeUsername = useSetting('Accounts_AllowUsernameChange', true);
const allowEmailChange = useSetting('Accounts_AllowEmailChange', true);
const allowUserAvatarChange = useSetting('Accounts_AllowUserAvatarChange');
const requireName = useSetting<boolean>('Accounts_RequireNameForSignUp');
const namesRegexSetting = useSetting('UTF8_User_Names_Validation');
const allowUserAvatarChange = useSetting('Accounts_AllowUserAvatarChange', true);
const requireName = useSetting('Accounts_RequireNameForSignUp', true);
const namesRegexSetting = useSetting('UTF8_User_Names_Validation', '[0-9a-zA-Z-_.]+');
const namesRegex = useMemo(() => new RegExp(`^${namesRegexSetting}$`), [namesRegexSetting]);

@ -1,4 +1,4 @@
import type { ISettingBase, SectionName, SettingId, GroupId, TabId, ISettingColor } from '@rocket.chat/core-typings';
import type { ISettingBase, ISettingColor, ISetting } from '@rocket.chat/core-typings';
import type { SettingsContextQuery } from '@rocket.chat/ui-contexts';
import { createContext, useContext, useMemo } from 'react';
import { useSyncExternalStore } from 'use-sync-external-store/shim';
@ -15,16 +15,18 @@ type EditableSettingsContextQuery = SettingsContextQuery & {
export type EditableSettingsContextValue = {
readonly queryEditableSetting: (
_id: SettingId,
_id: ISetting['_id'],
) => [subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => EditableSetting | undefined];
readonly queryEditableSettings: (
query: EditableSettingsContextQuery,
) => [subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => EditableSetting[]];
readonly queryGroupSections: (
_id: GroupId,
tab?: TabId,
) => [subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => SectionName[]];
readonly queryGroupTabs: (_id: GroupId) => [subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => TabId[]];
_id: ISetting['_id'],
tab?: ISetting['_id'],
) => [subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => string[]];
readonly queryGroupTabs: (
_id: ISetting['_id'],
) => [subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => ISetting['_id'][]];
readonly dispatch: (changes: Partial<EditableSetting>[]) => void;
readonly isEnterprise: boolean;
};
@ -32,15 +34,15 @@ export type EditableSettingsContextValue = {
export const EditableSettingsContext = createContext<EditableSettingsContextValue>({
queryEditableSetting: () => [(): (() => void) => (): void => undefined, (): undefined => undefined],
queryEditableSettings: () => [(): (() => void) => (): void => undefined, (): EditableSetting[] => []],
queryGroupSections: () => [(): (() => void) => (): void => undefined, (): SectionName[] => []],
queryGroupTabs: () => [(): (() => void) => (): void => undefined, (): TabId[] => []],
queryGroupSections: () => [(): (() => void) => (): void => undefined, (): string[] => []],
queryGroupTabs: () => [(): (() => void) => (): void => undefined, (): ISetting['_id'][] => []],
dispatch: () => undefined,
isEnterprise: false,
});
export const useIsEnterprise = (): boolean => useContext(EditableSettingsContext).isEnterprise;
export const useEditableSetting = (_id: SettingId): EditableSetting | undefined => {
export const useEditableSetting = (_id: ISetting['_id']): EditableSetting | undefined => {
const { queryEditableSetting } = useContext(EditableSettingsContext);
const [subscribe, getSnapshot] = useMemo(() => queryEditableSetting(_id), [queryEditableSetting, _id]);
@ -53,14 +55,14 @@ export const useEditableSettings = (query?: EditableSettingsContextQuery): Edita
return useSyncExternalStore(subscribe, getSnapshot);
};
export const useEditableSettingsGroupSections = (_id: SettingId, tab?: TabId): SectionName[] => {
export const useEditableSettingsGroupSections = (_id: ISetting['_id'], tab?: ISetting['_id']): string[] => {
const { queryGroupSections } = useContext(EditableSettingsContext);
const [subscribe, getSnapshot] = useMemo(() => queryGroupSections(_id, tab), [queryGroupSections, _id, tab]);
return useSyncExternalStore(subscribe, getSnapshot);
};
export const useEditableSettingsGroupTabs = (_id: SettingId): TabId[] => {
export const useEditableSettingsGroupTabs = (_id: ISetting['_id']): ISetting['_id'][] => {
const { queryGroupTabs } = useContext(EditableSettingsContext);
const [subscribe, getSnapshot] = useMemo(() => queryGroupTabs(_id), [queryGroupTabs, _id]);

@ -25,7 +25,7 @@ const CustomUserStatusRoute = (): ReactElement => {
const id = useRouteParameter('id');
const canManageUserStatus = usePermission('manage-user-status');
const { data: license } = useIsEnterprise();
const presenceDisabled = useSetting<boolean>('Presence_broadcast_disabled');
const presenceDisabled = useSetting('Presence_broadcast_disabled', false);
useEffect(() => {
presenceDisabled && route.push({ context: 'presence-service' });

@ -23,7 +23,7 @@ import { useActiveConnections } from '../../hooks/useActiveConnections';
const CustomUserStatusService = () => {
const { t } = useTranslation();
const result = useActiveConnections();
const presenceDisabled = useSetting<boolean>('Presence_broadcast_disabled');
const presenceDisabled = useSetting('Presence_broadcast_disabled', false);
const togglePresenceServiceEndpoint = useEndpoint('POST', '/v1/presence.enableBroadcast');
const disablePresenceService = useMutation(() => togglePresenceServiceEndpoint());
const { data: license, isLoading: licenseIsLoading } = useIsEnterprise();

@ -30,7 +30,7 @@ function NewImportPage() {
const importerKey = useRouteParameter('importerKey');
const importer = useMemo(() => (importers || []).find(({ key }) => key === importerKey), [importerKey, importers]);
const maxFileSize = useSetting<number>('FileUpload_MaxFileSize') ?? 0;
const maxFileSize = useSetting('FileUpload_MaxFileSize', 0);
const router = useRouter();

@ -11,7 +11,7 @@ const MessageReportInfo = ({ msgId }: { msgId: string }): JSX.Element => {
const dispatchToastMessage = useToastMessageDispatch();
const getReportsByMessage = useEndpoint('GET', `/v1/moderation.reports`);
const useRealName = Boolean(useSetting('UI_Use_Real_Name'));
const useRealName = useSetting('UI_Use_Real_Name', false);
const {
data: reportsByMessage,

@ -41,7 +41,7 @@ const ContextMessage = ({
const formatDateAndTime = useFormatDateAndTime();
const formatTime = useFormatTime();
const formatDate = useFormatDate();
const useRealName = Boolean(useSetting('UI_Use_Real_Name'));
const useRealName = useSetting('UI_Use_Real_Name', false);
const name = message.u.name || '';
const username = message.u.username || '';

@ -1,4 +1,4 @@
import type { SettingId, GroupId, ISetting, TabId } from '@rocket.chat/core-typings';
import type { ISetting } from '@rocket.chat/core-typings';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import type { SettingsContextQuery } from '@rocket.chat/ui-contexts';
import { useSettings } from '@rocket.chat/ui-contexts';
@ -62,7 +62,7 @@ const EditableSettingsProvider = ({ children, query = defaultQuery, omit = defau
return queries.every((query) => settingsCollection.find(query).count() > 0);
};
return createReactiveSubscriptionFactory((_id: SettingId): EditableSetting | undefined => {
return createReactiveSubscriptionFactory((_id: ISetting['_id']): EditableSetting | undefined => {
const settingsCollection = getSettingsCollection();
const editableSetting = settingsCollection.findOne(_id);
@ -121,7 +121,7 @@ const EditableSettingsProvider = ({ children, query = defaultQuery, omit = defau
const queryGroupSections = useMemo(
() =>
createReactiveSubscriptionFactory((_id: GroupId, tab?: TabId) =>
createReactiveSubscriptionFactory((_id: ISetting['_id'], tab?: ISetting['_id']) =>
Array.from(
new Set(
getSettingsCollection()
@ -155,7 +155,7 @@ const EditableSettingsProvider = ({ children, query = defaultQuery, omit = defau
const queryGroupTabs = useMemo(
() =>
createReactiveSubscriptionFactory((_id: GroupId) =>
createReactiveSubscriptionFactory((_id: ISetting['_id']) =>
Array.from(
new Set(
getSettingsCollection()

@ -1,4 +1,4 @@
import type { GroupId } from '@rocket.chat/core-typings';
import type { ISetting } from '@rocket.chat/core-typings';
import { useSettingStructure } from '@rocket.chat/ui-contexts';
import React from 'react';
@ -9,7 +9,7 @@ import OAuthGroupPage from '../groups/OAuthGroupPage';
import VoipGroupPage from '../groups/VoipGroupPage';
type SettingsGroupSelectorProps = {
groupId: GroupId;
groupId: ISetting['_id'];
onClickBack?: () => void;
};

@ -94,7 +94,7 @@ const AdminUserForm = ({ userData, onReload, context, refetchUserFormData, roleD
const queryClient = useQueryClient();
const customFieldsMetadata = useAccountsCustomFields();
const defaultRoles = useSetting<string>('Accounts_Registration_Users_Default_Roles') || '';
const defaultRoles = useSetting('Accounts_Registration_Users_Default_Roles', '');
const isVerificationNeeded = useSetting('Accounts_EmailVerification');
const defaultUserRoles = parseCSV(defaultRoles);

@ -32,9 +32,9 @@ const AdminUserSetRandomPasswordContent = ({
const requirePasswordChangeId = useUniqueId();
const passwordVerifierId = useUniqueId();
const requiresPasswordConfirmation = useSetting('Accounts_RequirePasswordConfirmation');
const passwordPlaceholder = String(useSetting('Accounts_PasswordPlaceholder'));
const passwordConfirmationPlaceholder = String(useSetting('Accounts_ConfirmPasswordPlaceholder'));
const requiresPasswordConfirmation = useSetting('Accounts_RequirePasswordConfirmation', true);
const passwordPlaceholder = useSetting('Accounts_PasswordPlaceholder', '');
const passwordConfirmationPlaceholder = useSetting('Accounts_ConfirmPasswordPlaceholder', '');
const passwordIsValid = useValidatePassword(password);

@ -1,7 +1,7 @@
import { useSetting, usePermission } from '@rocket.chat/ui-contexts';
export const useVoipExtensionPermission = () => {
const isVoipSettingEnabled = useSetting<boolean>('VoIP_TeamCollab_Enabled', false);
const isVoipSettingEnabled = useSetting('VoIP_TeamCollab_Enabled', false);
const canManageVoipExtensions = usePermission('manage-voip-extensions');
return isVoipSettingEnabled && canManageVoipExtensions;

@ -14,7 +14,7 @@ type TabName = 'users' | 'channels' | 'teams' | 'external';
const DirectoryPage = (): ReactElement => {
const { t } = useTranslation();
const defaultTab = useSetting<TabName>('Accounts_Directory_DefaultView') ?? 'users';
const defaultTab = useSetting<TabName>('Accounts_Directory_DefaultView', 'users');
const federationEnabled = useSetting('FEDERATION_Enabled');
const tab = useRouteParameter('tab') as TabName | undefined;
const router = useRouter();

@ -4,7 +4,7 @@ import type { ComponentProps, ReactElement } from 'react';
import React from 'react';
const CustomHomePageContent = (props: ComponentProps<typeof Box>): ReactElement => {
const body = String(useSetting('Layout_Home_Body'));
const body = useSetting('Layout_Home_Body', '');
return <Box withRichContent dangerouslySetInnerHTML={{ __html: body }} {...props} />;
};

@ -22,8 +22,8 @@ const DefaultHomePage = (): ReactElement => {
const isAdmin = useRole('admin');
const canCreateChannel = useAtLeastOnePermission(CREATE_CHANNEL_PERMISSIONS);
const workspaceName = useSetting('Site_Name');
const isCustomContentBodyEmpty = useSetting('Layout_Home_Body') === '';
const isCustomContentVisible = Boolean(useSetting('Layout_Home_Custom_Block_Visible'));
const isCustomContentBodyEmpty = useSetting('Layout_Home_Body', '') === '';
const isCustomContentVisible = useSetting('Layout_Home_Custom_Block_Visible', false);
return (
<Page color='default' data-qa='page-home' data-qa-type='default' background='tint'>

@ -9,7 +9,7 @@ const EDIT_LAYOUT_PERMISSIONS = ['view-privileged-setting', 'edit-privileged-set
const HomepageHeader = (): ReactElement => {
const t = useTranslation();
const title = useSetting('Layout_Home_Title') as string;
const title = useSetting('Layout_Home_Title', 'Home');
const canEditLayout = useAllPermissions(EDIT_LAYOUT_PERMISSIONS);
const settingsRoute = useRoute('admin-settings');

@ -13,10 +13,10 @@ const CustomContentCard = (props: Omit<ComponentProps<typeof Card>, 'type'>): Re
const { data } = useIsEnterprise();
const isAdmin = useRole('admin');
const customContentBody = useSetting<string>('Layout_Home_Body');
const customContentBody = useSetting('Layout_Home_Body', '');
const isCustomContentBodyEmpty = customContentBody === '';
const isCustomContentVisible = useSetting<boolean>('Layout_Home_Custom_Block_Visible');
const isCustomContentOnly = useSetting<boolean>('Layout_Custom_Body_Only');
const isCustomContentVisible = useSetting('Layout_Home_Custom_Block_Visible', false);
const isCustomContentOnly = useSetting('Layout_Custom_Body_Only', false);
const setCustomContentVisible = useSettingSetValue('Layout_Home_Custom_Block_Visible');
const setCustomContentOnly = useSettingSetValue('Layout_Custom_Body_Only');

@ -15,7 +15,7 @@ const BannerEnterpriseTrialEnded = (): ReactElement => {
linkTarget: '_blank',
};
const cloudWorkspaceHadTrial = useSetting('Cloud_Workspace_Had_Trial') as boolean;
const cloudWorkspaceHadTrial = useSetting('Cloud_Workspace_Had_Trial', false);
const [showTrialBanner, setShowTrialBanner] = useLocalStorage('showAppsTrialEndBanner', cloudWorkspaceHadTrial);

@ -22,7 +22,7 @@ type CurrentUserDisplayProps = {
};
const CurrentUserDisplay = ({ user }: CurrentUserDisplayProps) => {
const showRealNames = useSetting<boolean>('UI_Use_Real_Name');
const showRealNames = useSetting('UI_Use_Real_Name', false);
const getRoles = useRolesDescription();
const { t } = useTranslation();

@ -9,7 +9,7 @@ type LayoutProps = {
};
const Layout = ({ children }: LayoutProps) => {
const hideLogo = useSetting<boolean>('Layout_Login_Hide_Logo');
const hideLogo = useSetting('Layout_Login_Hide_Logo', false);
const customLogo = useAssetWithDarkModePath('logo');
const customBackground = useAssetWithDarkModePath('background');

@ -10,8 +10,8 @@ function ExternalFrameContainer() {
const uid = useUserId();
const room = useRoom();
const { 'X-Auth-Token': authToken } = sdk.rest.getCredentials() || {};
const keyStr = useSetting<string>('Omnichannel_External_Frame_Encryption_JWK');
const frameURLSetting = useSetting<string>('Omnichannel_External_Frame_URL');
const keyStr = useSetting('Omnichannel_External_Frame_Encryption_JWK', '');
const frameURLSetting = useSetting('Omnichannel_External_Frame_URL', '');
const token = useQuery(['externalFrame', keyStr, authToken], async () => {
if (!keyStr || !authToken) {

@ -42,7 +42,7 @@ const ContactHistoryMessagesList = ({
};
const { phase, error, items: messages, itemCount: totalItemCount } = useRecordList(messageList);
const messageGroupingPeriod = Number(useSetting('Message_GroupingPeriod'));
const messageGroupingPeriod = useSetting('Message_GroupingPeriod', 300);
return (
<>

@ -1,5 +1,5 @@
import { Box } from '@rocket.chat/fuselage';
import { useSetting } from '@rocket.chat/ui-contexts';
import { useAbsoluteUrl, useSetting } from '@rocket.chat/ui-contexts';
import type { ReactElement } from 'react';
import React from 'react';
import { useTranslation } from 'react-i18next';
@ -12,8 +12,7 @@ import Wrapper from './Wrapper';
// TODO: use `CodeSnippet` Component
const Installation = (): ReactElement => {
const { t } = useTranslation();
const setting = useSetting('Site_Url') as string;
const siteUrl = setting?.replace(/\/$/, '');
const siteUrl = useSetting('Site_Url', useAbsoluteUrl()('')).replace(/\/$/, '');
const installString = `<!-- Start of Rocket.Chat Livechat Script -->
<script type="text/javascript">

@ -28,7 +28,7 @@ type OutlookEventsListProps = {
const OutlookEventsList = ({ onClose, changeRoute }: OutlookEventsListProps): ReactElement => {
const t = useTranslation();
const outlookUrl = useSetting<string>('Outlook_Calendar_Outlook_Url');
const outlookUrl = useSetting('Outlook_Calendar_Outlook_Url', '');
const { authEnabled, isError, error } = useOutlookAuthentication();
const hasOutlookMethods = !(isError && error instanceof NotOnDesktopError);

@ -20,7 +20,7 @@ type HeaderProps<T> = {
const Header = ({ room }: HeaderProps<IRoom>): ReactElement | null => {
const { isMobile, isEmbedded, showTopNavbarEmbeddedLayout } = useLayout();
const encrypted = Boolean(room.encrypted);
const unencryptedMessagesAllowed = useSetting<boolean>('E2E_Allow_Unencrypted_Messages');
const unencryptedMessagesAllowed = useSetting('E2E_Allow_Unencrypted_Messages', false);
const shouldDisplayE2EESetup = encrypted && !unencryptedMessagesAllowed;
const slots = useMemo(

@ -19,7 +19,7 @@ type HeaderProps = {
const Header = ({ room }: HeaderProps): ReactElement | null => {
const { isMobile, isEmbedded, showTopNavbarEmbeddedLayout } = useLayout();
const encrypted = Boolean(room.encrypted);
const unencryptedMessagesAllowed = useSetting<boolean>('E2E_Allow_Unencrypted_Messages');
const unencryptedMessagesAllowed = useSetting('E2E_Allow_Unencrypted_Messages', false);
const shouldDisplayE2EESetup = encrypted && !unencryptedMessagesAllowed;
const slots = useMemo(

@ -22,7 +22,7 @@ export const MessageList = function MessageList({ rid, messageListRef }: Message
const messages = useMessages({ rid });
const subscription = useRoomSubscription();
const showUserAvatar = !!useUserPreference<boolean>('displayAvatars');
const messageGroupingPeriod = Number(useSetting('Message_GroupingPeriod'));
const messageGroupingPeriod = useSetting('Message_GroupingPeriod', 300);
const firstUnreadMessageId = useFirstUnreadMessageId();
return (

@ -2,7 +2,7 @@ import { useSetting } from '@rocket.chat/ui-contexts';
import { useMemo } from 'react';
export const useAutoLinkDomains = (): string[] => {
const domains = useSetting<string>('Message_CustomDomain_AutoLink');
const domains = useSetting('Message_CustomDomain_AutoLink', '');
const customDomains = useMemo(() => (domains ? domains.split(',').map((domain) => domain.trim()) : []), [domains]);

@ -14,7 +14,7 @@ export type AutoTranslateOptions = {
};
export const useAutoTranslate = (subscription?: ISubscription): AutoTranslateOptions => {
const autoTranslateSettingEnabled = Boolean(useSetting('AutoTranslate_Enabled'));
const autoTranslateSettingEnabled = useSetting('AutoTranslate_Enabled', false);
const isSubscriptionEnabled = autoTranslateSettingEnabled && subscription?.autoTranslateLanguage && subscription?.autoTranslate;
const isLivechatRoom = useMemo(() => subscription && roomCoordinator.isLivechatRoom(subscription?.t), [subscription]);
const autoTranslateEnabled = Boolean(isSubscriptionEnabled || isLivechatRoom);

@ -5,9 +5,9 @@ export const useKatex = (): {
katexDollarSyntaxEnabled: boolean;
katexParenthesisSyntaxEnabled: boolean;
} => {
const katexEnabled = Boolean(useSetting('Katex_Enabled'));
const katexDollarSyntaxEnabled = Boolean(useSetting('Katex_Dollar_Syntax')) && katexEnabled;
const katexParenthesisSyntaxEnabled = Boolean(useSetting('Katex_Parenthesis_Syntax')) && katexEnabled;
const katexEnabled = useSetting('Katex_Enabled', true);
const katexDollarSyntaxEnabled = useSetting('Katex_Dollar_Syntax', false) && katexEnabled;
const katexParenthesisSyntaxEnabled = useSetting('Katex_Parenthesis_Syntax', true) && katexEnabled;
return {
katexEnabled,

@ -17,7 +17,7 @@ const mergeHideSysMessages = (
export const useMessages = ({ rid }: { rid: IRoom['_id'] }): IMessage[] => {
const showThreadsInMainChannel = useUserPreference<boolean>('showThreadsInMainChannel', false);
const hideSysMesSetting = useSetting<MessageTypesValues[]>('Hide_System_Messages') ?? [];
const hideSysMesSetting = useSetting<MessageTypesValues[]>('Hide_System_Messages', []);
const room = useRoom();
const hideRoomSysMes: Array<MessageTypesValues> = Array.isArray(room.sysMes) ? room.sysMes : [];

@ -37,10 +37,10 @@ const MessageListProvider = ({ children, messageListRef, attachmentDimension }:
const { isMobile } = useLayout();
const showRealName = Boolean(useSetting('UI_Use_Real_Name'));
const showColors = useSetting('HexColorPreview_Enabled') as boolean;
const showRealName = useSetting('UI_Use_Real_Name', false);
const showColors = useSetting('HexColorPreview_Enabled', false);
const displayRolesGlobal = Boolean(useSetting('UI_DisplayRoles'));
const displayRolesGlobal = useSetting('UI_DisplayRoles', true);
const hideRolesPreference = Boolean(!useUserPreference<boolean>('hideRoles') && !isMobile);
const showRoles = displayRolesGlobal && hideRolesPreference;
const showUsername = Boolean(!useUserPreference<boolean>('hideUsernames') && !isMobile);

@ -25,7 +25,7 @@ type UserCardWithDataProps = {
const UserCardWithData = ({ username, rid, onOpenUserInfo, onClose }: UserCardWithDataProps) => {
const { t } = useTranslation();
const getRoles = useRolesDescription();
const showRealNames = Boolean(useSetting('UI_Use_Real_Name'));
const showRealNames = useSetting('UI_Use_Real_Name', false);
const { data, isLoading: isUserInfoLoading } = useUserInfoQuery({ username });
const {

@ -64,7 +64,7 @@ const RoomBody = (): ReactElement => {
const { hasMorePreviousMessages, hasMoreNextMessages, isLoadingMoreMessages } = useRoomMessages();
const allowAnonymousRead = useSetting('Accounts_AllowAnonymousRead') as boolean | undefined;
const allowAnonymousRead = useSetting('Accounts_AllowAnonymousRead', false);
const canPreviewChannelRoom = usePermission('preview-c-room');
@ -86,7 +86,7 @@ const RoomBody = (): ReactElement => {
return subscribed;
}, [allowAnonymousRead, canPreviewChannelRoom, room, subscribed]);
const useRealName = useSetting('UI_Use_Real_Name') as boolean;
const useRealName = useSetting('UI_Use_Real_Name', false);
const innerBoxRef = useRef<HTMLDivElement | null>(null);

@ -61,7 +61,7 @@ const RoomBody = (): ReactElement => {
const { hasMorePreviousMessages, hasMoreNextMessages, isLoadingMoreMessages } = useRoomMessages();
const allowAnonymousRead = useSetting('Accounts_AllowAnonymousRead') as boolean | undefined;
const allowAnonymousRead = useSetting('Accounts_AllowAnonymousRead', false);
const canPreviewChannelRoom = usePermission('preview-c-room');

@ -9,7 +9,7 @@ import RoomForewordUsernameListItem from './RoomForewordUsernameListItem';
type RoomForewordUsernameListProps = { usernames: Array<NonNullable<IUser['username']>> };
const RoomForewordUsernameList = ({ usernames }: RoomForewordUsernameListProps) => {
const useRealName = Boolean(useSetting('UI_Use_Real_Name'));
const useRealName = useSetting('UI_Use_Real_Name', false);
return (
<Margins inline={4}>
{usernames.map((username) => (

@ -23,7 +23,7 @@ export const RoomTopic = ({ room, user }: RoomTopicProps) => {
const userId = useUserId();
const directUserId = room.uids?.filter((uid) => uid !== userId).shift();
const directUserData = usePresence(directUserId);
const useRealName = useSetting('UI_Use_Real_Name') as boolean;
const useRealName = useSetting('UI_Use_Real_Name', false);
const router = useRouter();
const currentRoute = router.getLocationPathname();

@ -29,7 +29,7 @@ export const useFileUploadDropTarget = (): readonly [
const t = useTranslation();
const fileUploadEnabled = useSetting<boolean>('FileUpload_Enabled');
const fileUploadEnabled = useSetting('FileUpload_Enabled', true);
const user = useUser();
const fileUploadAllowedForUser = useReactiveValue(
useCallback(() => !roomCoordinator.readOnly(room._id, { username: user?.username }), [room._id, user?.username]),

@ -108,8 +108,8 @@ const MessageBox = ({
const chat = useChat();
const room = useRoom();
const t = useTranslation();
const e2eEnabled = useSetting<boolean>('E2E_Enable');
const unencryptedMessagesAllowed = useSetting<boolean>('E2E_Allow_Unencrypted_Messages');
const e2eEnabled = useSetting('E2E_Enable', false);
const unencryptedMessagesAllowed = useSetting('E2E_Allow_Unencrypted_Messages', false);
const isSlashCommandAllowed = !e2eEnabled || !room.encrypted || unencryptedMessagesAllowed;
const composerPlaceholder = useMessageBoxPlaceholder(t('Message'), room);

@ -11,10 +11,10 @@ import { useMediaPermissions } from '../../hooks/useMediaPermissions';
const audioRecorder = new AudioRecorder();
export const useAudioMessageAction = (disabled: boolean, isMicrophoneDenied: boolean): GenericMenuItemProps => {
const isFileUploadEnabled = useSetting('FileUpload_Enabled') as boolean;
const isAudioRecorderEnabled = useSetting('Message_AudioRecorderEnabled') as boolean;
const fileUploadMediaTypeBlackList = useSetting('FileUpload_MediaTypeBlackList') as string;
const fileUploadMediaTypeWhiteList = useSetting('FileUpload_MediaTypeWhiteList') as string;
const isFileUploadEnabled = useSetting('FileUpload_Enabled', true);
const isAudioRecorderEnabled = useSetting('Message_AudioRecorderEnabled', true);
const fileUploadMediaTypeBlackList = useSetting('FileUpload_MediaTypeBlackList', '');
const fileUploadMediaTypeWhiteList = useSetting('FileUpload_MediaTypeWhiteList', '');
const [isPermissionDenied] = useMediaPermissions('microphone');
const isAllowed = useMemo(

@ -17,7 +17,7 @@ export const useCreateDiscussionAction = (room?: IRoom): GenericMenuItemProps =>
const handleCreateDiscussion = () =>
setModal(<CreateDiscussion onClose={() => setModal(null)} defaultParentRoom={room?.prid || room?._id} />);
const discussionEnabled = useSetting('Discussion_enabled') as boolean;
const discussionEnabled = useSetting('Discussion_enabled', true);
const canStartDiscussion = usePermission('start-discussion', room._id);
const canSstartDiscussionOtherUser = usePermission('start-discussion-other-user', room._id);

@ -9,7 +9,7 @@ const fileInputProps = { type: 'file', multiple: true };
export const useFileUploadAction = (disabled: boolean): GenericMenuItemProps => {
const t = useTranslation();
const fileUploadEnabled = useSetting<boolean>('FileUpload_Enabled');
const fileUploadEnabled = useSetting('FileUpload_Enabled', true);
const fileInputRef = useFileInput(fileInputProps);
const chat = useChat();

@ -17,7 +17,7 @@ export const useShareLocationAction = (room?: IRoom, tmid?: IMessage['tmid']): G
const isMapViewEnabled = useSetting('MapView_Enabled') === true;
const isGeolocationCurrentPositionSupported = Boolean(navigator.geolocation?.getCurrentPosition);
const googleMapsApiKey = useSetting('MapView_GMapsAPIKey') as string;
const googleMapsApiKey = useSetting('MapView_GMapsAPIKey', '');
const canGetGeolocation = isMapViewEnabled && isGeolocationCurrentPositionSupported && googleMapsApiKey && googleMapsApiKey.length;
const handleShareLocation = () => setModal(<ShareLocationModal rid={room._id} tmid={tmid} onClose={() => setModal(null)} />);

@ -9,10 +9,10 @@ import { useMediaActionTitle } from '../../hooks/useMediaActionTitle';
import { useMediaPermissions } from '../../hooks/useMediaPermissions';
export const useVideoMessageAction = (disabled: boolean): GenericMenuItemProps => {
const isFileUploadEnabled = useSetting('FileUpload_Enabled') as boolean;
const isVideoRecorderEnabled = useSetting('Message_VideoRecorderEnabled') as boolean;
const fileUploadMediaTypeBlackList = useSetting('FileUpload_MediaTypeBlackList') as string;
const fileUploadMediaTypeWhiteList = useSetting('FileUpload_MediaTypeWhiteList') as string;
const isFileUploadEnabled = useSetting('FileUpload_Enabled', true);
const isVideoRecorderEnabled = useSetting('Message_VideoRecorderEnabled', true);
const fileUploadMediaTypeBlackList = useSetting('FileUpload_MediaTypeBlackList', 'image/svg+xml');
const fileUploadMediaTypeWhiteList = useSetting('FileUpload_MediaTypeWhiteList', '');
const [isPermissionDenied, setIsPermissionDenied] = useMediaPermissions('camera');
const isAllowed = useMemo(

@ -10,7 +10,7 @@ import AddWebdavAccountModal from '../../../../webdav/AddWebdavAccountModal';
import WebdavFilePickerModal from '../../../../webdav/WebdavFilePickerModal';
export const useWebdavActions = (): GenericMenuItemProps[] => {
const enabled = useSetting<boolean>('Webdav_Integration_Enabled', false);
const enabled = useSetting('Webdav_Integration_Enabled', false);
const { isSuccess, data } = useWebDAVAccountIntegrationsQuery({ enabled });

@ -20,7 +20,7 @@ const MessageBoxReplies = (): ReactElement | null => {
const replies = useSyncExternalStore(chat.composer.quotedMessages.subscribe, chat.composer.quotedMessages.get);
const useRealName = Boolean(useSetting('UI_Use_Real_Name'));
const useRealName = useSetting('UI_Use_Real_Name', false);
if (!replies.length) {
return null;

@ -42,7 +42,7 @@ function DiscussionsList({
onChangeFilter,
}: DiscussionsListProps) {
const { t } = useTranslation();
const showRealNames = useSetting<boolean>('UI_Use_Real_Name') || false;
const showRealNames = useSetting('UI_Use_Real_Name', false);
const inputRef = useAutoFocus(true);
const onClick = useCallback((e) => {

@ -83,7 +83,7 @@ const EditRoomInfo = ({ room, onClickClose, onClickBack }: EditRoomInfoProps) =>
const roomType = 'prid' in room ? 'discussion' : room.teamMain ? 'team' : 'channel';
const retentionPolicy = useRetentionPolicy(room);
const retentionMaxAgeDefault = msToTimeUnit(TIMEUNIT.days, Number(useSetting<number>(getRetentionSetting(room.t)))) ?? 30;
const retentionMaxAgeDefault = msToTimeUnit(TIMEUNIT.days, useSetting(getRetentionSetting(room.t), 2592000000)) ?? 30;
const defaultValues = useEditRoomInitialValues(room);
const namesValidation = useSetting('UTF8_Channel_Names_Validation');
const allowSpecialNames = useSetting('UI_Allow_room_names_with_special_chars');

@ -25,7 +25,7 @@ type MessageSearchProps = {
const MessageSearch = ({ searchText, globalSearch }: MessageSearchProps): ReactElement => {
const t = useTranslation();
const formatDate = useFormatDate();
const pageSize = useSetting<number>('PageSize') ?? 10;
const pageSize = useSetting('PageSize', 10);
const [limit, setLimit] = useState(pageSize);
const showUserAvatar = !!useUserPreference<boolean>('displayAvatars');

@ -10,7 +10,7 @@ export const useMessageDeletionIsAllowed = (rid: IRoom['_id'], file: IUpload, ui
const userHasPermissionToDeleteAny = usePermission('delete-message', rid);
const userHasPermissionToDeleteOwn = usePermission('delete-own-message');
const bypassBlockTimeLimit = usePermission('bypass-time-limit-edit-and-delete', rid);
const blockDeleteInMinutes = useSetting<number>('Message_AllowDeleting_BlockDeleteInMinutes');
const blockDeleteInMinutes = useSetting('Message_AllowDeleting_BlockDeleteInMinutes', 0);
const isDeletionAllowed = useMemo(() => {
if (canForceDelete) {

@ -84,7 +84,7 @@ const RoomMembers = ({
[loadMoreItems, members],
);
const useRealName = Boolean(useSetting('UI_Use_Real_Name'));
const useRealName = useSetting('UI_Use_Real_Name', false);
return (
<>

@ -51,7 +51,7 @@ const ThreadListItem = ({ thread, unread, unreadUser, unreadGroup, onClick }: Th
[toggleFollowMessage],
);
const showRealNames = (useSetting('UI_Use_Real_Name') as boolean | undefined) ?? false;
const showRealNames = useSetting('UI_Use_Real_Name', false);
const handleListItemClick = useCallback(
(event: MouseEvent<HTMLElement>): void => {

@ -64,7 +64,7 @@ const ThreadMessageList = ({ mainMessage }: ThreadMessageListProps): ReactElemen
const hideUsernames = useUserPreference<boolean>('hideUsernames');
const showUserAvatar = !!useUserPreference<boolean>('displayAvatars');
const firstUnreadMessageId = useFirstUnreadMessageId();
const messageGroupingPeriod = Number(useSetting('Message_GroupingPeriod'));
const messageGroupingPeriod = useSetting('Message_GroupingPeriod', 300);
const { messageListRef } = useMessageListNavigation();
const listRef = useMergedRefs<HTMLElement | null>(listScrollRef, messageListRef);

@ -25,7 +25,7 @@ const VideoConfListItem = ({
const t = useTranslation();
const formatDate = useTimeAgo();
const joinCall = useVideoConfJoinCall();
const showRealName = Boolean(useSetting('UI_Use_Real_Name'));
const showRealName = useSetting('UI_Use_Real_Name', false);
const {
_id: callId,

@ -12,7 +12,7 @@ import { queryClient } from '../../../lib/queryClient';
export function useOpenRoom({ type, reference }: { type: RoomType; reference: string }) {
const user = useUser();
const allowAnonymousRead = useSetting<boolean>('Accounts_AllowAnonymousRead') ?? true;
const allowAnonymousRead = useSetting('Accounts_AllowAnonymousRead', true);
const getRoomByTypeAndName = useMethod('getRoomByTypeAndName');
const createDirectMessage = useMethod('createDirectMessage');
const openRoom = useMethod('openRoom');

@ -97,16 +97,16 @@ export const useRetentionPolicy = (
}
| undefined => {
const settings = {
enabled: useSetting('RetentionPolicy_Enabled') as boolean,
filesOnly: useSetting('RetentionPolicy_FilesOnly') as boolean,
doNotPrunePinned: useSetting('RetentionPolicy_DoNotPrunePinned') as boolean,
ignoreThreads: useSetting('RetentionPolicy_DoNotPruneThreads') as boolean,
appliesToChannels: useSetting('RetentionPolicy_AppliesToChannels') as boolean,
maxAgeChannels: useSetting('RetentionPolicy_TTL_Channels') as number,
appliesToGroups: useSetting('RetentionPolicy_AppliesToGroups') as boolean,
maxAgeGroups: useSetting('RetentionPolicy_TTL_Groups') as number,
appliesToDMs: useSetting('RetentionPolicy_AppliesToDMs') as boolean,
maxAgeDMs: useSetting('RetentionPolicy_TTL_DMs') as number,
enabled: useSetting('RetentionPolicy_Enabled', false),
filesOnly: useSetting('RetentionPolicy_FilesOnly', false),
doNotPrunePinned: useSetting('RetentionPolicy_DoNotPrunePinned', false),
ignoreThreads: useSetting('RetentionPolicy_DoNotPruneThreads', true),
appliesToChannels: useSetting('RetentionPolicy_AppliesToChannels', false),
maxAgeChannels: useSetting('RetentionPolicy_TTL_Channels', 2592000000),
appliesToGroups: useSetting('RetentionPolicy_AppliesToGroups', false),
maxAgeGroups: useSetting('RetentionPolicy_TTL_Groups', 2592000000),
appliesToDMs: useSetting('RetentionPolicy_AppliesToDMs', false),
maxAgeDMs: useSetting('RetentionPolicy_TTL_DMs', 2592000000),
} as const;
if (!room) {

@ -30,7 +30,7 @@ const FileUploadModal = ({
const [description, setDescription] = useState<string>(fileDescription || '');
const t = useTranslation();
const dispatchToastMessage = useToastMessageDispatch();
const maxFileSize = useSetting('FileUpload_MaxFileSize') as number;
const maxFileSize = useSetting('FileUpload_MaxFileSize', 104857600);
const ref = useAutoFocus<HTMLInputElement>();

@ -33,14 +33,14 @@ type ComposerPopupProviderProps = {
const ComposerPopupProvider = ({ children, room }: ComposerPopupProviderProps) => {
const { _id: rid, encrypted: isRoomEncrypted } = room;
const userSpotlight = useMethod('spotlight');
const suggestionsCount = useSetting<number>('Number_of_users_autocomplete_suggestions');
const cannedResponseEnabled = useSetting<boolean>('Canned_Responses_Enable');
const suggestionsCount = useSetting('Number_of_users_autocomplete_suggestions', 5);
const cannedResponseEnabled = useSetting('Canned_Responses_Enable', true);
const [recentEmojis] = useLocalStorage('emoji.recent', []);
const isOmnichannel = isOmnichannelRoom(room);
const useEmoji = useUserPreference('useEmojis');
const { t, i18n } = useTranslation();
const e2eEnabled = useSetting<boolean>('E2E_Enable');
const unencryptedMessagesAllowed = useSetting<boolean>('E2E_Allow_Unencrypted_Messages');
const e2eEnabled = useSetting('E2E_Enable', false);
const unencryptedMessagesAllowed = useSetting('E2E_Allow_Unencrypted_Messages', false);
const encrypted = isRoomEncrypted && e2eEnabled && !unencryptedMessagesAllowed;
const call = useMethod('getSlashCommandPreviews');

@ -22,7 +22,7 @@ type DocumentTitleWrapperProps = {
};
const DocumentTitleWrapper = ({ children }: DocumentTitleWrapperProps) => {
useDocumentTitle(useSetting<string>('Site_Name') || '', false);
useDocumentTitle(useSetting('Site_Name', ''), false);
const { title, key } = useDocumentTitle(useUnreadMessages(), false);
const refocusRef = useRouteTitleFocus();

@ -30,7 +30,7 @@ const RegisterUsername = () => {
const uid = useUserId();
const logout = useLogout();
const formLabelId = useUniqueId();
const hideLogo = useSetting<boolean>('Layout_Login_Hide_Logo');
const hideLogo = useSetting('Layout_Login_Hide_Logo', false);
const customLogo = useAssetWithDarkModePath('logo');
const customBackground = useAssetWithDarkModePath('background');
const dispatchToastMessage = useToastMessageDispatch();

@ -11,7 +11,7 @@ const UsernameCheck = ({ children }: { children: ReactNode }): ReactElement => {
const userId = useUserId();
const { data: userData, isLoading } = useUserInfoQuery({ userId: userId || '' });
const allowAnonymousRead = useSetting<boolean>('Accounts_AllowAnonymousRead') ?? false;
const allowAnonymousRead = useSetting('Accounts_AllowAnonymousRead', false);
const shouldRegisterUsername = useReactiveValue(
useCallback(() => {

@ -2,7 +2,7 @@ import { useSetting } from '@rocket.chat/ui-contexts';
import { useEffect } from 'react';
export const useGoogleTagManager = () => {
const i = useSetting<string>('GoogleTagManager_id');
const i = useSetting('GoogleTagManager_id', '');
useEffect(() => {
if (typeof i !== 'string' || i.trim() === '') {

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save