2024-12-11 09:36:59 +00:00
|
|
|
/*
|
|
|
|
|
Copyright 2022-2024 New Vector Ltd.
|
|
|
|
|
|
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
Please see LICENSE in the repository root for full details.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
import { type ChangeEvent, type FC, useCallback } from "react";
|
|
|
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
|
|
|
|
|
|
import { FieldRow, InputField } from "../input/Input";
|
|
|
|
|
import {
|
|
|
|
|
useSetting,
|
|
|
|
|
duplicateTiles as duplicateTilesSetting,
|
2024-12-11 05:23:42 -05:00
|
|
|
debugTileLayout as debugTileLayoutSetting,
|
2024-12-13 14:53:08 +00:00
|
|
|
showNonMemberTiles as showNonMemberTilesSetting,
|
2024-12-11 09:36:59 +00:00
|
|
|
} from "./settings";
|
|
|
|
|
import type { MatrixClient } from "matrix-js-sdk/src/client";
|
|
|
|
|
|
|
|
|
|
interface Props {
|
|
|
|
|
client: MatrixClient;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const DeveloperSettingsTab: FC<Props> = ({ client }) => {
|
|
|
|
|
const { t } = useTranslation();
|
|
|
|
|
const [duplicateTiles, setDuplicateTiles] = useSetting(duplicateTilesSetting);
|
2024-12-11 05:23:42 -05:00
|
|
|
const [debugTileLayout, setDebugTileLayout] = useSetting(
|
|
|
|
|
debugTileLayoutSetting,
|
|
|
|
|
);
|
2024-12-13 14:53:08 +00:00
|
|
|
const [showNonMemberTiles, setShowNonMemberTiles] = useSetting(
|
|
|
|
|
showNonMemberTilesSetting,
|
|
|
|
|
);
|
2024-12-11 09:36:59 +00:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
<p>
|
|
|
|
|
{t("developer_mode.hostname", {
|
|
|
|
|
hostname: window.location.hostname || "unknown",
|
|
|
|
|
})}
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
{t("version", {
|
|
|
|
|
productName: import.meta.env.VITE_PRODUCT_NAME || "Element Call",
|
|
|
|
|
version: import.meta.env.VITE_APP_VERSION || "dev",
|
|
|
|
|
})}
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
{t("developer_mode.crypto_version", {
|
|
|
|
|
version: client.getCrypto()?.getVersion() || "unknown",
|
|
|
|
|
})}
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
{t("developer_mode.matrix_id", {
|
|
|
|
|
id: client.getUserId() || "unknown",
|
|
|
|
|
})}
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
{t("developer_mode.device_id", {
|
|
|
|
|
id: client.getDeviceId() || "unknown",
|
|
|
|
|
})}
|
|
|
|
|
</p>
|
|
|
|
|
<FieldRow>
|
|
|
|
|
<InputField
|
|
|
|
|
id="duplicateTiles"
|
|
|
|
|
type="number"
|
|
|
|
|
label={t("developer_mode.duplicate_tiles_label")}
|
|
|
|
|
value={duplicateTiles.toString()}
|
|
|
|
|
min={0}
|
|
|
|
|
onChange={useCallback(
|
|
|
|
|
(event: ChangeEvent<HTMLInputElement>): void => {
|
|
|
|
|
const value = event.target.valueAsNumber;
|
|
|
|
|
if (value < 0) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
setDuplicateTiles(Number.isNaN(value) ? 0 : value);
|
|
|
|
|
},
|
|
|
|
|
[setDuplicateTiles],
|
|
|
|
|
)}
|
|
|
|
|
/>
|
|
|
|
|
</FieldRow>
|
2024-12-11 05:23:42 -05:00
|
|
|
<FieldRow>
|
|
|
|
|
<InputField
|
|
|
|
|
id="debugTileLayout"
|
|
|
|
|
type="checkbox"
|
|
|
|
|
checked={debugTileLayout}
|
|
|
|
|
label={t("developer_mode.debug_tile_layout_label")}
|
|
|
|
|
onChange={(event: ChangeEvent<HTMLInputElement>): void =>
|
|
|
|
|
setDebugTileLayout(event.target.checked)
|
|
|
|
|
}
|
|
|
|
|
/>
|
|
|
|
|
</FieldRow>
|
2024-12-13 14:53:08 +00:00
|
|
|
<FieldRow>
|
|
|
|
|
<InputField
|
|
|
|
|
id="showNonMemberTiles"
|
|
|
|
|
type="checkbox"
|
|
|
|
|
label={t("developer_mode.show_non_member_tiles")}
|
|
|
|
|
checked={!!showNonMemberTiles}
|
|
|
|
|
onChange={useCallback(
|
|
|
|
|
(event: ChangeEvent<HTMLInputElement>): void => {
|
|
|
|
|
setShowNonMemberTiles(event.target.checked);
|
|
|
|
|
},
|
|
|
|
|
[setShowNonMemberTiles],
|
|
|
|
|
)}
|
|
|
|
|
/>
|
|
|
|
|
</FieldRow>
|
2024-12-11 09:36:59 +00:00
|
|
|
</>
|
|
|
|
|
);
|
|
|
|
|
};
|