Skip to content

Commit 3ee5083

Browse files
authored
Dev mode (#3037)
1 parent 05a056b commit 3ee5083

22 files changed

+594
-68
lines changed

src/app/PersistableValues.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,13 @@ type PersistableValues_4_2_0 = PersistableValues_4_1_0 & {
7575
selectedBrowser: string | null;
7676
};
7777

78+
type PersistableValues_4_4_0 = PersistableValues_4_2_0 & {
79+
isDeveloperModeEnabled: boolean;
80+
};
81+
7882
export type PersistableValues = Pick<
79-
PersistableValues_4_2_0,
80-
keyof PersistableValues_4_2_0
83+
PersistableValues_4_4_0,
84+
keyof PersistableValues_4_4_0
8185
>;
8286

8387
export const migrations = {
@@ -139,4 +143,8 @@ export const migrations = {
139143
...before,
140144
selectedBrowser: null,
141145
}),
146+
'>=4.4.0': (before: PersistableValues_4_2_0): PersistableValues_4_4_0 => ({
147+
...before,
148+
isDeveloperModeEnabled: false,
149+
}),
142150
};

src/app/selectors.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ export const selectPersistableValues = createStructuredSelector({
4242
isMinimizeOnCloseEnabled,
4343
isAddNewServersEnabled: ({ isAddNewServersEnabled }: RootState) =>
4444
isAddNewServersEnabled,
45+
isDeveloperModeEnabled: ({ isDeveloperModeEnabled }: RootState) =>
46+
isDeveloperModeEnabled,
4547
hasHideOnTrayNotificationShown: ({
4648
hasHideOnTrayNotificationShown,
4749
}: RootState) => hasHideOnTrayNotificationShown,
@@ -57,4 +59,7 @@ export const selectPersistableValues = createStructuredSelector({
5759
selectedBrowser: ({ selectedBrowser }: RootState) => selectedBrowser,
5860
videoCallWindowState: ({ videoCallWindowState }: RootState) =>
5961
videoCallWindowState,
62+
isVideoCallWindowPersistenceEnabled: ({
63+
isVideoCallWindowPersistenceEnabled,
64+
}: RootState) => isVideoCallWindowPersistenceEnabled,
6065
});

src/i18n/de-DE.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@
257257
"close": "Schließen",
258258
"copy": "&Kopieren",
259259
"cut": "&Ausschneiden",
260+
"developerMode": "Entwicklermodus",
260261
"disableGpu": "GPU deaktivieren",
261262
"documentation": "Dokumentation",
262263
"downloads": "Downloads",

src/i18n/en.i18n.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@
289289
"close": "Close",
290290
"copy": "&Copy",
291291
"cut": "Cu&t",
292+
"developerMode": "Developer Mode",
292293
"disableGpu": "Disable GPU",
293294
"documentation": "Documentation",
294295
"downloads": "Downloads",
@@ -354,7 +355,9 @@
354355
"clearCache": "Clear Cache",
355356
"clearStorageData": "Clear Storage Data",
356357
"copyCurrentUrl": "Copy current URL",
357-
"reloadClearingCache": "Force reload"
358+
"reloadClearingCache": "Force reload",
359+
"serverInfo": "Server Info",
360+
"supportedVersionsInfo": "Supported Versions Info"
358361
},
359362
"tooltips": {
360363
"unreadMessage": "{{- count}} unread message",

src/i18n/es.i18n.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"contextMenu": {
3-
"cut": "Co&rtar",
3+
"cut": "Cor&tar",
44
"copy": "&Copiar",
55
"paste": "&Pegar",
66
"selectAll": "Seleccionar &todo",
@@ -279,8 +279,9 @@
279279
"clearTrustedCertificates": "Borrar certificados de confianza",
280280
"close": "Cerrar",
281281
"copy": "&Copiar",
282-
"cut": "Cu&tar",
283-
"disableGpu": "Desactivar GPU",
282+
"cut": "Cor&tar",
283+
"developerMode": "Modo desarrollador",
284+
"disableGpu": "Deshabilitar GPU",
284285
"documentation": "Documentación",
285286
"downloads": "Descargas",
286287
"settings": "Configuración",

src/i18n/fr.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@
255255
"close": "Fermer",
256256
"copy": "&Copier",
257257
"cut": "Cou&per",
258+
"developerMode": "Mode développeur",
258259
"disableGpu": "Désactiver le GPU",
259260
"documentation": "Documentation",
260261
"downloads": "Téléchargements",

src/i18n/hu.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@
280280
"close": "Bezárás",
281281
"copy": "&Másolás",
282282
"cut": "&Kivágás",
283+
"developerMode": "Fejlesztői mód",
283284
"disableGpu": "GPU letiltása",
284285
"documentation": "Dokumentáció",
285286
"downloads": "Letöltések",

src/i18n/ja.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@
112112
"close": "閉じる",
113113
"copy": "コピー (&C)",
114114
"cut": "切り取り (&T)",
115+
"developerMode": "開発者モード",
115116
"documentation": "ドキュメント",
116117
"editMenu": "編集 (&E)",
117118
"fileMenu": "ファイル (&F)",

src/i18n/pl.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@
135135
"close": "Zamknij",
136136
"copy": "&Kopiuj",
137137
"cut": "&Wytnij",
138+
"developerMode": "Tryb programisty",
138139
"documentation": "Dokumentacja",
139140
"editMenu": "&Edycja",
140141
"fileMenu": "&Plik",

src/i18n/pt-BR.i18n.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"contextMenu": {
3-
"cut": "Cor&tar",
3+
"cut": "Recor&tar",
44
"copy": "&Copiar",
55
"paste": "Co&lar",
66
"selectAll": "&Selecionar tudo",
@@ -274,7 +274,8 @@
274274
"clearTrustedCertificates": "Limpar certificados confiáveis",
275275
"close": "Fechar",
276276
"copy": "&Copiar",
277-
"cut": "Cor&tar",
277+
"cut": "Recor&tar",
278+
"developerMode": "Modo desenvolvedor",
278279
"disableGpu": "Desabilitar GPU",
279280
"documentation": "Documentação",
280281
"downloads": "Downloads",

src/i18n/ru.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@
258258
"close": "Закрыть",
259259
"copy": "&Копировать",
260260
"cut": "В&ырезать",
261+
"developerMode": "Режим разработчика",
261262
"disableGpu": "Отключить GPU",
262263
"documentation": "Документация",
263264
"downloads": "Загрузки",

src/i18n/tr-TR.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
"close": "Kapat",
130130
"copy": "&Kopyala",
131131
"cut": "Kes",
132+
"developerMode": "Geliştirici Modu",
132133
"documentation": "Dökümantasyon",
133134
"editMenu": "&Düzenle",
134135
"fileMenu": "&Dosya",

src/i18n/uk-UA.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
"close": "Закрити",
123123
"copy": "Ко&піювати",
124124
"cut": "В&ирізати",
125+
"developerMode": "Режим розробника",
125126
"documentation": "Документація",
126127
"editMenu": "&Редагувати",
127128
"fileMenu": "&Файл",

src/i18n/zh-CN.i18n.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@
166166
"close": "关闭",
167167
"copy": "复制 (&C)",
168168
"cut": "剪切 (&T)",
169-
"disableGpu": "禁用GPU",
169+
"developerMode": "开发者模式",
170+
"disableGpu": "禁用 GPU",
170171
"documentation": "文件",
171172
"downloads": "下载",
172173
"settings": "设置",

src/i18n/zh-TW.i18n.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@
120120
"close": "關閉",
121121
"copy": "複製 (&C)",
122122
"cut": "剪下 (&T)",
123+
"developerMode": "開發者模式",
123124
"documentation": "文件",
124125
"editMenu": "編輯 (&E)",
125126
"fileMenu": "檔案 (&F)",

src/store/rootReducer.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { availableBrowsers } from '../ui/reducers/availableBrowsers';
1818
import { currentView } from '../ui/reducers/currentView';
1919
import { hasHideOnTrayNotificationShown } from '../ui/reducers/hasHideOnTrayNotificationShown';
2020
import { isAddNewServersEnabled } from '../ui/reducers/isAddNewServersEnabled';
21+
import { isDeveloperModeEnabled } from '../ui/reducers/isDeveloperModeEnabled';
2122
import { isFlashFrameEnabled } from '../ui/reducers/isFlashFrameEnabled';
2223
import { isHardwareAccelerationEnabled } from '../ui/reducers/isHardwareAccelerationEnabled';
2324
import { isInternalVideoChatWindowEnabled } from '../ui/reducers/isInternalVideoChatWindowEnabled';
@@ -90,6 +91,7 @@ export const rootReducer = combineReducers({
9091
isNTLMCredentialsEnabled,
9192
videoCallWindowState,
9293
isVideoCallWindowPersistenceEnabled,
94+
isDeveloperModeEnabled,
9395
});
9496

9597
export type RootState = ReturnType<typeof rootReducer>;

src/ui/actions.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ export const MENU_BAR_TOGGLE_IS_SIDE_BAR_ENABLED_CLICKED =
2727
'menu-bar/toggle-is-side-bar-enabled-clicked';
2828
export const MENU_BAR_TOGGLE_IS_TRAY_ICON_ENABLED_CLICKED =
2929
'menu-bar/toggle-is-tray-icon-enabled-clicked';
30+
export const MENU_BAR_TOGGLE_IS_DEVELOPER_MODE_ENABLED_CLICKED =
31+
'menu-bar/toggle-is-developer-mode-enabled-clicked';
3032
export const ROOT_WINDOW_ICON_CHANGED = 'root-window/icon-changed';
3133
export const ROOT_WINDOW_STATE_CHANGED = 'root-window/state-changed';
3234
export const VIDEO_CALL_WINDOW_STATE_CHANGED =
@@ -98,6 +100,8 @@ export const SETTINGS_SET_IS_MENU_BAR_ENABLED_CHANGED =
98100
'settings/set-is-menu-bar-enabled-changed';
99101
export const SETTINGS_SET_IS_VIDEO_CALL_WINDOW_PERSISTENCE_ENABLED_CHANGED =
100102
'settings/set-is-video-call-window-persistence-enabled-changed';
103+
export const SETTINGS_SET_IS_DEVELOPER_MODE_ENABLED_CHANGED =
104+
'settings/set-is-developer-mode-enabled-changed';
101105
export const SETTINGS_CLEAR_PERMITTED_SCREEN_CAPTURE_PERMISSIONS =
102106
'settings/clear-permitted-screen-capture-permissions';
103107
export const SETTINGS_NTLM_CREDENTIALS_CHANGED =
@@ -143,6 +147,7 @@ export type UiActionTypeToPayloadMap = {
143147
[MENU_BAR_TOGGLE_IS_SHOW_WINDOW_ON_UNREAD_CHANGED_ENABLED_CLICKED]: boolean;
144148
[MENU_BAR_TOGGLE_IS_SIDE_BAR_ENABLED_CLICKED]: boolean;
145149
[MENU_BAR_TOGGLE_IS_TRAY_ICON_ENABLED_CLICKED]: boolean;
150+
[MENU_BAR_TOGGLE_IS_DEVELOPER_MODE_ENABLED_CLICKED]: boolean;
146151
[ROOT_WINDOW_ICON_CHANGED]: RootWindowIcon | null;
147152
[ROOT_WINDOW_STATE_CHANGED]: WindowState;
148153
[VIDEO_CALL_WINDOW_STATE_CHANGED]: WindowState;
@@ -223,6 +228,7 @@ export type UiActionTypeToPayloadMap = {
223228
[SETTINGS_SET_IS_SIDE_BAR_ENABLED_CHANGED]: boolean;
224229
[SETTINGS_SET_IS_MENU_BAR_ENABLED_CHANGED]: boolean;
225230
[SETTINGS_SET_IS_VIDEO_CALL_WINDOW_PERSISTENCE_ENABLED_CHANGED]: boolean;
231+
[SETTINGS_SET_IS_DEVELOPER_MODE_ENABLED_CHANGED]: boolean;
226232
[SETTINGS_CLEAR_PERMITTED_SCREEN_CAPTURE_PERMISSIONS]: void;
227233
[SETTINGS_NTLM_CREDENTIALS_CHANGED]: boolean;
228234
[SETTINGS_AVAILABLE_BROWSERS_UPDATED]: string[];

src/ui/components/SideBar/ServerButton.tsx

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@ import {
1313
import type { DragEvent, MouseEvent } from 'react';
1414
import { useMemo, useRef } from 'react';
1515
import { useTranslation } from 'react-i18next';
16+
import { useSelector } from 'react-redux';
1617

18+
import type { SupportedVersions } from '../../../servers/supportedVersions/types';
1719
import { dispatch } from '../../../store';
20+
import type { RootState } from '../../../store/rootReducer';
1821
import {
1922
SIDE_BAR_SERVER_SELECTED,
2023
SIDE_BAR_SERVER_RELOAD,
@@ -23,6 +26,7 @@ import {
2326
SIDE_BAR_SERVER_FORCE_RELOAD,
2427
SIDE_BAR_SERVER_REMOVE,
2528
} from '../../actions';
29+
import ServerInfoDropdown from './ServerInfoDropdown';
2630
import { Initials, ServerButtonWrapper } from './styles';
2731
import { useDropdownVisibility } from './useDropdownVisibility';
2832

@@ -38,6 +42,10 @@ type ServerButtonProps = {
3842
hasUnreadMessages: boolean;
3943
mentionCount?: number;
4044
isDragged: boolean;
45+
version?: string;
46+
isSupportedVersion?: boolean;
47+
supportedVersionsSource?: 'server' | 'cloud' | 'builtin';
48+
supportedVersions?: SupportedVersions;
4149
onDragStart: (event: DragEvent) => void;
4250
onDragEnd: (event: DragEvent) => void;
4351
onDragEnter: (event: DragEvent) => void;
@@ -62,6 +70,10 @@ const ServerButton = ({
6270
mentionCount,
6371
userLoggedIn,
6472
isDragged,
73+
version,
74+
isSupportedVersion,
75+
supportedVersionsSource,
76+
supportedVersions,
6577
onDragStart,
6678
onDragEnd,
6779
onDragEnter,
@@ -74,10 +86,21 @@ const ServerButton = ({
7486

7587
const reference = useRef(null);
7688
const target = useRef(null);
89+
const serverInfoReference = useRef(null);
90+
const serverInfoTarget = useRef(null);
7791

7892
const { t } = useTranslation();
7993

94+
const isDeveloperModeEnabled = useSelector(
95+
({ isDeveloperModeEnabled }: RootState) => isDeveloperModeEnabled
96+
);
97+
8098
const { isVisible, toggle } = useDropdownVisibility({ reference, target });
99+
const { isVisible: isServerInfoVisible, toggle: toggleServerInfo } =
100+
useDropdownVisibility({
101+
reference: serverInfoReference,
102+
target: serverInfoTarget,
103+
});
81104

82105
const initials = useMemo(
83106
() =>
@@ -100,7 +123,6 @@ const ServerButton = ({
100123

101124
const handleServerContextMenu = (event: MouseEvent): void => {
102125
event.preventDefault();
103-
// dispatch({ type: SIDE_BAR_CONTEXT_MENU_TRIGGERED, payload: url });
104126
toggle();
105127
};
106128

@@ -142,7 +164,6 @@ const ServerButton = ({
142164
secondary
143165
position='relative'
144166
overflow='visible'
145-
// className={[isSelected && 'is-focused'].filter(Boolean).join(' ')}
146167
icon={
147168
<Box>
148169
<Initials visible={!favicon}>{initials}</Initials>
@@ -201,6 +222,16 @@ const ServerButton = ({
201222
<OptionIcon name='code-block' />
202223
<OptionContent>{t('sidebar.item.openDevTools')}</OptionContent>
203224
</Option>
225+
{isDeveloperModeEnabled && (
226+
<Option
227+
ref={serverInfoReference}
228+
onMouseEnter={() => toggleServerInfo(true)}
229+
onMouseLeave={() => toggleServerInfo(false)}
230+
>
231+
<OptionIcon name='info' />
232+
<OptionContent>{t('sidebar.item.serverInfo')}</OptionContent>
233+
</Option>
234+
)}
204235
<Option
205236
onClick={() =>
206237
handleActionDropdownClick(SIDE_BAR_SERVER_FORCE_RELOAD, url)
@@ -224,6 +255,17 @@ const ServerButton = ({
224255
</Option>
225256
</Dropdown>
226257
)}
258+
{isServerInfoVisible && isDeveloperModeEnabled && (
259+
<ServerInfoDropdown
260+
reference={serverInfoReference}
261+
target={serverInfoTarget}
262+
url={url}
263+
version={version}
264+
supportedVersions={supportedVersions}
265+
isSupportedVersion={isSupportedVersion}
266+
supportedVersionsSource={supportedVersionsSource}
267+
/>
268+
)}
227269
</>
228270
);
229271
};

0 commit comments

Comments
 (0)