mirror of
https://github.com/Qortal/Qortal-Hub.git
synced 2025-05-31 05:36:59 +00:00
List all namespaces in useTranslation
This commit is contained in:
parent
a996015b20
commit
ed3a9350ea
@ -308,7 +308,13 @@ function App() {
|
|||||||
const [isLoading, setIsLoading] = useState<boolean>(false);
|
const [isLoading, setIsLoading] = useState<boolean>(false);
|
||||||
const [isLoadingSendCoin, setIsLoadingSendCoin] = useState<boolean>(false);
|
const [isLoadingSendCoin, setIsLoadingSendCoin] = useState<boolean>(false);
|
||||||
|
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
const [
|
const [
|
||||||
|
@ -53,7 +53,13 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => {
|
|||||||
const [isOpenSeedModal, setIsOpenSeedModal] = useState(false);
|
const [isOpenSeedModal, setIsOpenSeedModal] = useState(false);
|
||||||
const [isLoadingEncryptSeed, setIsLoadingEncryptSeed] = useState(false);
|
const [isLoadingEncryptSeed, setIsLoadingEncryptSeed] = useState(false);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const { isShow, onCancel, onOk, show } = useModal();
|
const { isShow, onCancel, onOk, show } = useModal();
|
||||||
|
|
||||||
const { getRootProps, getInputProps } = useDropzone({
|
const { getRootProps, getInputProps } = useDropzone({
|
||||||
@ -461,7 +467,13 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => {
|
|||||||
const [note, setNote] = useState('');
|
const [note, setNote] = useState('');
|
||||||
const [isEdit, setIsEdit] = useState(false);
|
const [isEdit, setIsEdit] = useState(false);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (wallet?.name) {
|
if (wallet?.name) {
|
||||||
|
@ -37,7 +37,13 @@ export const AppInfo = ({ app, myName }) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const isSelectedAppPinned = !!sortablePinnedApps?.find(
|
const isSelectedAppPinned = !!sortablePinnedApps?.find(
|
||||||
(item) => item?.name === app?.name && item?.service === app?.service
|
(item) => item?.name === app?.name && item?.service === app?.service
|
||||||
|
@ -42,7 +42,13 @@ export const AppInfoSnippet = ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<AppInfoSnippetContainer
|
<AppInfoSnippetContainer
|
||||||
|
@ -69,7 +69,13 @@ export const AppPublish = ({ categories, myAddress, myName }) => {
|
|||||||
const [file, setFile] = useState(null);
|
const [file, setFile] = useState(null);
|
||||||
const { show } = useContext(QORTAL_APP_CONTEXT);
|
const { show } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [tag1, setTag1] = useState('');
|
const [tag1, setTag1] = useState('');
|
||||||
const [tag2, setTag2] = useState('');
|
const [tag2, setTag2] = useState('');
|
||||||
const [tag3, setTag3] = useState('');
|
const [tag3, setTag3] = useState('');
|
||||||
|
@ -20,7 +20,13 @@ export const AppRating = ({ app, myName, ratingCountPosition = 'right' }) => {
|
|||||||
const [openSnack, setOpenSnack] = useState(false);
|
const [openSnack, setOpenSnack] = useState(false);
|
||||||
const [infoSnack, setInfoSnack] = useState(null);
|
const [infoSnack, setInfoSnack] = useState(null);
|
||||||
const hasCalledRef = useRef(false);
|
const hasCalledRef = useRef(false);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const getRating = useCallback(async (name, service) => {
|
const getRating = useCallback(async (name, service) => {
|
||||||
try {
|
try {
|
||||||
|
@ -45,7 +45,13 @@ export const AppsCategoryDesktop = ({
|
|||||||
const [searchValue, setSearchValue] = useState('');
|
const [searchValue, setSearchValue] = useState('');
|
||||||
const virtuosoRef = useRef(null);
|
const virtuosoRef = useRef(null);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const categoryList = useMemo(() => {
|
const categoryList = useMemo(() => {
|
||||||
if (category?.id === 'all') return availableQapps;
|
if (category?.id === 'all') return availableQapps;
|
||||||
|
@ -51,7 +51,13 @@ export const AppsDesktop = ({
|
|||||||
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
||||||
const { showTutorial } = useContext(QORTAL_APP_CONTEXT);
|
const { showTutorial } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const myApp = useMemo(() => {
|
const myApp = useMemo(() => {
|
||||||
return availableQapps.find(
|
return availableQapps.find(
|
||||||
|
@ -47,7 +47,13 @@ export const AppsDevMode = ({
|
|||||||
const [categories, setCategories] = useState([]);
|
const [categories, setCategories] = useState([]);
|
||||||
const iframeRefs = useRef({});
|
const iframeRefs = useRef({});
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -41,7 +41,13 @@ export const AppsDevModeHome = ({
|
|||||||
const [domain, setDomain] = useState('127.0.0.1');
|
const [domain, setDomain] = useState('127.0.0.1');
|
||||||
const [port, setPort] = useState('');
|
const [port, setPort] = useState('');
|
||||||
const [selectedPreviewFile, setSelectedPreviewFile] = useState(null);
|
const [selectedPreviewFile, setSelectedPreviewFile] = useState(null);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const { isShow, onCancel, onOk, show, message } = useModal();
|
const { isShow, onCancel, onOk, show, message } = useModal();
|
||||||
const {
|
const {
|
||||||
openSnackGlobal,
|
openSnackGlobal,
|
||||||
|
@ -28,7 +28,13 @@ export const AppsHomeDesktop = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const [qortalUrl, setQortalUrl] = useState('');
|
const [qortalUrl, setQortalUrl] = useState('');
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const openQortalUrl = () => {
|
const openQortalUrl = () => {
|
||||||
try {
|
try {
|
||||||
|
@ -105,7 +105,13 @@ export const AppsLibraryDesktop = ({
|
|||||||
const [searchValue, setSearchValue] = useState('');
|
const [searchValue, setSearchValue] = useState('');
|
||||||
const virtuosoRef = useRef(null);
|
const virtuosoRef = useRef(null);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const officialApps = useMemo(() => {
|
const officialApps = useMemo(() => {
|
||||||
return availableQapps.filter(
|
return availableQapps.filter(
|
||||||
|
@ -76,7 +76,13 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [isNewTabWindow, setIsNewTabWindow] = useState(false);
|
const [isNewTabWindow, setIsNewTabWindow] = useState(false);
|
||||||
const tabsRef = useRef(null);
|
const tabsRef = useRef(null);
|
||||||
const [anchorEl, setAnchorEl] = useState(null);
|
const [anchorEl, setAnchorEl] = useState(null);
|
||||||
|
@ -73,7 +73,13 @@ export const AppsPrivate = ({ myName, myAddress }) => {
|
|||||||
const [memberGroups] = useAtom(memberGroupsAtom);
|
const [memberGroups] = useAtom(memberGroupsAtom);
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const myGroupsPrivate = useMemo(() => {
|
const myGroupsPrivate = useMemo(() => {
|
||||||
return memberGroups?.filter(
|
return memberGroups?.filter(
|
||||||
|
@ -27,7 +27,13 @@ import { useTranslation } from 'react-i18next';
|
|||||||
export const BuyQortInformation = ({ balance }) => {
|
export const BuyQortInformation = ({ balance }) => {
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const openBuyQortInfoFunc = useCallback(
|
const openBuyQortInfoFunc = useCallback(
|
||||||
(e) => {
|
(e) => {
|
||||||
|
@ -19,7 +19,13 @@ export const AdminSpace = ({
|
|||||||
isOwner,
|
isOwner,
|
||||||
}) => {
|
}) => {
|
||||||
const [isMoved, setIsMoved] = useState(false);
|
const [isMoved, setIsMoved] = useState(false);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (hide) {
|
if (hide) {
|
||||||
|
@ -74,7 +74,13 @@ export const AdminSpaceInner = ({
|
|||||||
const [isLoadingPublishKey, setIsLoadingPublishKey] = useState(false);
|
const [isLoadingPublishKey, setIsLoadingPublishKey] = useState(false);
|
||||||
const { show, setInfoSnackCustom, setOpenSnackGlobal } =
|
const { show, setInfoSnackCustom, setOpenSnackGlobal } =
|
||||||
useContext(QORTAL_APP_CONTEXT);
|
useContext(QORTAL_APP_CONTEXT);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const getAdminGroupSecretKey = useCallback(async () => {
|
const getAdminGroupSecretKey = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
|
@ -40,7 +40,13 @@ export const AnnouncementDiscussion = ({
|
|||||||
isPrivate,
|
isPrivate,
|
||||||
}) => {
|
}) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [isSending, setIsSending] = useState(false);
|
const [isSending, setIsSending] = useState(false);
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
const [isFocusedParent, setIsFocusedParent] = useState(false);
|
const [isFocusedParent, setIsFocusedParent] = useState(false);
|
||||||
|
@ -18,7 +18,13 @@ export const AnnouncementItem = ({
|
|||||||
myName,
|
myName,
|
||||||
}) => {
|
}) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [commentLength, setCommentLength] = useState(0);
|
const [commentLength, setCommentLength] = useState(0);
|
||||||
|
|
||||||
const getNumberOfComments = useCallback(async () => {
|
const getNumberOfComments = useCallback(async () => {
|
||||||
|
@ -20,7 +20,13 @@ export const AnnouncementList = ({
|
|||||||
myName,
|
myName,
|
||||||
}) => {
|
}) => {
|
||||||
const [messages, setMessages] = useState(initialMessages);
|
const [messages, setMessages] = useState(initialMessages);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
cache.clearAll();
|
cache.clearAll();
|
||||||
|
@ -42,7 +42,13 @@ export const ChatDirect = ({
|
|||||||
setMobileViewModeKeepOpen,
|
setMobileViewModeKeepOpen,
|
||||||
}) => {
|
}) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const { queueChats, addToQueue, processWithNewMessages } = useMessageQueue();
|
const { queueChats, addToQueue, processWithNewMessages } = useMessageQueue();
|
||||||
const [isFocusedParent, setIsFocusedParent] = useState(false);
|
const [isFocusedParent, setIsFocusedParent] = useState(false);
|
||||||
const [onEditMessage, setOnEditMessage] = useState(null);
|
const [onEditMessage, setOnEditMessage] = useState(null);
|
||||||
|
@ -96,7 +96,13 @@ export const ChatGroup = ({
|
|||||||
const [, forceUpdate] = useReducer((x) => x + 1, 0);
|
const [, forceUpdate] = useReducer((x) => x + 1, 0);
|
||||||
const lastReadTimestamp = useRef(null);
|
const lastReadTimestamp = useRef(null);
|
||||||
const handleUpdateRef = useRef(null);
|
const handleUpdateRef = useRef(null);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const getTimestampEnterChat = async (selectedGroup) => {
|
const getTimestampEnterChat = async (selectedGroup) => {
|
||||||
try {
|
try {
|
||||||
|
@ -181,7 +181,13 @@ export const ChatList = ({
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
|
@ -60,7 +60,13 @@ export const ChatOptions = ({
|
|||||||
const [searchValue, setSearchValue] = useState('');
|
const [searchValue, setSearchValue] = useState('');
|
||||||
const [selectedMember, setSelectedMember] = useState(0);
|
const [selectedMember, setSelectedMember] = useState(0);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const parentRef = useRef(null);
|
const parentRef = useRef(null);
|
||||||
const parentRefMentions = useRef(null);
|
const parentRefMentions = useRef(null);
|
||||||
const [lastMentionTimestamp, setLastMentionTimestamp] = useState(null);
|
const [lastMentionTimestamp, setLastMentionTimestamp] = useState(null);
|
||||||
|
@ -40,7 +40,13 @@ export const CreateCommonSecret = ({
|
|||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const getPublishesFromAdmins = async (admins: string[]) => {
|
const getPublishesFromAdmins = async (admins: string[]) => {
|
||||||
const queryString = admins.map((name) => `name=${name}`).join('&');
|
const queryString = admins.map((name) => `name=${name}`).join('&');
|
||||||
|
@ -153,7 +153,13 @@ export const GroupAnnouncements = ({
|
|||||||
editorRef.current = editorInstance;
|
editorRef.current = editorInstance;
|
||||||
};
|
};
|
||||||
const [, forceUpdate] = useReducer((x) => x + 1, 0);
|
const [, forceUpdate] = useReducer((x) => x + 1, 0);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const triggerRerender = () => {
|
const triggerRerender = () => {
|
||||||
forceUpdate(); // Trigger re-render by updating the state
|
forceUpdate(); // Trigger re-render by updating the state
|
||||||
|
@ -33,7 +33,13 @@ export const GroupAvatar = ({
|
|||||||
const [avatarFile, setAvatarFile] = useState(null);
|
const [avatarFile, setAvatarFile] = useState(null);
|
||||||
const [tempAvatar, setTempAvatar] = useState(null);
|
const [tempAvatar, setTempAvatar] = useState(null);
|
||||||
const { show } = useContext(QORTAL_APP_CONTEXT);
|
const { show } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [anchorEl, setAnchorEl] = useState(null);
|
const [anchorEl, setAnchorEl] = useState(null);
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
// Handle child element click to open Popover
|
// Handle child element click to open Popover
|
||||||
@ -263,7 +269,13 @@ const PopoverComp = ({
|
|||||||
myName,
|
myName,
|
||||||
}) => {
|
}) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover
|
<Popover
|
||||||
|
@ -2,7 +2,13 @@ import { forwardRef, useEffect, useImperativeHandle, useState } from 'react';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
export default forwardRef((props, ref) => {
|
export default forwardRef((props, ref) => {
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const [selectedIndex, setSelectedIndex] = useState(0);
|
const [selectedIndex, setSelectedIndex] = useState(0);
|
||||||
|
|
||||||
|
@ -170,7 +170,13 @@ export const MessageItem = memo(
|
|||||||
}, [message?.id]);
|
}, [message?.id]);
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@ -612,7 +618,13 @@ export const MessageItem = memo(
|
|||||||
|
|
||||||
export const ReplyPreview = ({ message, isEdit = false }) => {
|
export const ReplyPreview = ({ message, isEdit = false }) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
|
@ -54,7 +54,13 @@ const MenuBar = memo(
|
|||||||
const { editor } = useCurrentEditor();
|
const { editor } = useCurrentEditor();
|
||||||
const fileInputRef = useRef(null);
|
const fileInputRef = useRef(null);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (editor && setEditorRef) {
|
if (editor && setEditorRef) {
|
||||||
|
@ -13,7 +13,13 @@ export const CoreSyncStatus = () => {
|
|||||||
const [coreInfos, setCoreInfos] = useState({});
|
const [coreInfos, setCoreInfos] = useState({});
|
||||||
const [isUsingGateway, setIsUsingGateway] = useState(false);
|
const [isUsingGateway, setIsUsingGateway] = useState(false);
|
||||||
|
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -67,7 +67,13 @@ export const DesktopFooter = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
if (hide) return;
|
if (hide) return;
|
||||||
return (
|
return (
|
||||||
|
@ -84,7 +84,13 @@ export const DesktopHeader = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const [value, setValue] = useState(0);
|
const [value, setValue] = useState(0);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
|
@ -28,7 +28,13 @@ export const DesktopSideBar = ({
|
|||||||
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
||||||
|
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
|
@ -38,7 +38,13 @@ export const AttachmentCard = ({
|
|||||||
const [isOpen, setIsOpen] = useState(true);
|
const [isOpen, setIsOpen] = useState(true);
|
||||||
const { downloadResource } = useContext(QORTAL_APP_CONTEXT);
|
const { downloadResource } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const saveToDisk = async () => {
|
const saveToDisk = async () => {
|
||||||
const { name, service, identifier } = resourceData;
|
const { name, service, identifier } = resourceData;
|
||||||
|
@ -63,7 +63,13 @@ export const Embed = ({ embedLink }) => {
|
|||||||
const [parsedData, setParsedData] = useState(null);
|
const [parsedData, setParsedData] = useState(null);
|
||||||
const setBlobs = useSetAtom(blobControllerAtom);
|
const setBlobs = useSetAtom(blobControllerAtom);
|
||||||
const [selectedGroupId] = useAtom(selectedGroupIdAtom);
|
const [selectedGroupId] = useAtom(selectedGroupIdAtom);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const resourceData = useMemo(() => {
|
const resourceData = useMemo(() => {
|
||||||
const parsedDataOnTheFly = parseQortalLink(embedLink);
|
const parsedDataOnTheFly = parseQortalLink(embedLink);
|
||||||
if (
|
if (
|
||||||
|
@ -30,7 +30,13 @@ export const ImageCard = ({
|
|||||||
encryptionType,
|
encryptionType,
|
||||||
}) => {
|
}) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [isOpen, setIsOpen] = useState(true);
|
const [isOpen, setIsOpen] = useState(true);
|
||||||
const [height, setHeight] = useState('400px');
|
const [height, setHeight] = useState('400px');
|
||||||
|
|
||||||
|
@ -40,7 +40,13 @@ export const PollCard = ({
|
|||||||
const { show, userInfo } = useContext(QORTAL_APP_CONTEXT);
|
const { show, userInfo } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const [isLoadingSubmit, setIsLoadingSubmit] = useState(false);
|
const [isLoadingSubmit, setIsLoadingSubmit] = useState(false);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const handleVote = async () => {
|
const handleVote = async () => {
|
||||||
const fee = await getFee('VOTE_ON_POLL');
|
const fee = await getFee('VOTE_ON_POLL');
|
||||||
@ -379,7 +385,13 @@ const PollResults = ({ votes }) => {
|
|||||||
...votes?.voteCounts?.map((option) => option.voteCount)
|
...votes?.voteCounts?.map((option) => option.voteCount)
|
||||||
);
|
);
|
||||||
const options = votes?.voteCounts;
|
const options = votes?.voteCounts;
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{ width: '100%', p: 2 }}>
|
<Box sx={{ width: '100%', p: 2 }}>
|
||||||
|
@ -32,7 +32,13 @@ export const GeneralNotifications = ({ address }) => {
|
|||||||
setAnchorEl(event.currentTarget);
|
setAnchorEl(event.currentTarget);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -29,7 +29,13 @@ export const JoinGroup = () => {
|
|||||||
const [isLoadingInfo, setIsLoadingInfo] = useState(false);
|
const [isLoadingInfo, setIsLoadingInfo] = useState(false);
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [isLoadingJoinGroup, setIsLoadingJoinGroup] = useState(false);
|
const [isLoadingJoinGroup, setIsLoadingJoinGroup] = useState(false);
|
||||||
|
|
||||||
const handleJoinGroup = async (e) => {
|
const handleJoinGroup = async (e) => {
|
||||||
|
@ -97,7 +97,13 @@ export const AddGroup = ({ address, open, setOpen }) => {
|
|||||||
setMaxBlock(event.target.value as string);
|
setMaxBlock(event.target.value as string);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
const handleCreateGroup = async () => {
|
const handleCreateGroup = async () => {
|
||||||
|
@ -42,7 +42,13 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => {
|
|||||||
const { show } = useContext(QORTAL_APP_CONTEXT);
|
const { show } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const [memberGroups] = useAtom(memberGroupsAtom);
|
const [memberGroups] = useAtom(memberGroupsAtom);
|
||||||
const setTxList = useSetAtom(txListAtom);
|
const setTxList = useSetAtom(txListAtom);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [groups, setGroups] = useState([]);
|
const [groups, setGroups] = useState([]);
|
||||||
const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to
|
const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to
|
||||||
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
||||||
|
@ -28,7 +28,13 @@ import { useTranslation } from 'react-i18next';
|
|||||||
|
|
||||||
export const BlockedUsersModal = () => {
|
export const BlockedUsersModal = () => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [isOpenBlockedModal, setIsOpenBlockedModal] = useAtom(
|
const [isOpenBlockedModal, setIsOpenBlockedModal] = useAtom(
|
||||||
isOpenBlockedModalAtom
|
isOpenBlockedModalAtom
|
||||||
);
|
);
|
||||||
|
@ -73,7 +73,13 @@ export const GroupMail = ({
|
|||||||
const anchorElInstanceFilter = useRef<any>(null);
|
const anchorElInstanceFilter = useRef<any>(null);
|
||||||
const [tempPublishedList, setTempPublishedList] = useState([]);
|
const [tempPublishedList, setTempPublishedList] = useState([]);
|
||||||
const dataPublishes = useRef({});
|
const dataPublishes = useRef({});
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
const groupIdRef = useRef<any>(null);
|
const groupIdRef = useRef<any>(null);
|
||||||
|
@ -144,7 +144,13 @@ export const NewThread = ({
|
|||||||
setPostReply,
|
setPostReply,
|
||||||
isPrivate,
|
isPrivate,
|
||||||
}: NewMessageProps) => {
|
}: NewMessageProps) => {
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const { show } = useContext(QORTAL_APP_CONTEXT);
|
const { show } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const [isOpen, setIsOpen] = useState<boolean>(false);
|
const [isOpen, setIsOpen] = useState<boolean>(false);
|
||||||
const [value, setValue] = useState('');
|
const [value, setValue] = useState('');
|
||||||
|
@ -115,7 +115,13 @@ export const Thread = ({
|
|||||||
const [isLoading, setIsLoading] = useState(true);
|
const [isLoading, setIsLoading] = useState(true);
|
||||||
const [postReply, setPostReply] = useState(null);
|
const [postReply, setPostReply] = useState(null);
|
||||||
const [hasLastPage, setHasLastPage] = useState(false);
|
const [hasLastPage, setHasLastPage] = useState(false);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
// Update: Use a new ref for the scrollable container
|
// Update: Use a new ref for the scrollable container
|
||||||
const threadContainerRef = useRef(null);
|
const threadContainerRef = useRef(null);
|
||||||
|
@ -444,7 +444,13 @@ export const Group = ({
|
|||||||
const [isForceShowCreationKeyPopup, setIsForceShowCreationKeyPopup] =
|
const [isForceShowCreationKeyPopup, setIsForceShowCreationKeyPopup] =
|
||||||
useState(false);
|
useState(false);
|
||||||
const groupsOwnerNamesRef = useRef({});
|
const groupsOwnerNamesRef = useRef({});
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const [groupsProperties, setGroupsProperties] = useAtom(groupsPropertiesAtom);
|
const [groupsProperties, setGroupsProperties] = useAtom(groupsPropertiesAtom);
|
||||||
const setGroupsOwnerNames = useSetAtom(groupsOwnerNamesAtom);
|
const setGroupsOwnerNames = useSetAtom(groupsOwnerNamesAtom);
|
||||||
|
@ -18,7 +18,13 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => {
|
|||||||
const [groupsWithJoinRequests, setGroupsWithJoinRequests] = useState([]);
|
const [groupsWithJoinRequests, setGroupsWithJoinRequests] = useState([]);
|
||||||
const [isExpanded, setIsExpanded] = useState(false);
|
const [isExpanded, setIsExpanded] = useState(false);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
const getJoinRequests = async () => {
|
const getJoinRequests = async () => {
|
||||||
|
@ -28,7 +28,13 @@ export const GroupJoinRequests = ({
|
|||||||
setDesktopViewMode,
|
setDesktopViewMode,
|
||||||
}) => {
|
}) => {
|
||||||
const [isExpanded, setIsExpanded] = useState(false);
|
const [isExpanded, setIsExpanded] = useState(false);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [groupsWithJoinRequests, setGroupsWithJoinRequests] = useState([]);
|
const [groupsWithJoinRequests, setGroupsWithJoinRequests] = useState([]);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [txList] = useAtom(txListAtom);
|
const [txList] = useAtom(txListAtom);
|
||||||
|
@ -49,7 +49,13 @@ export const GroupList = ({
|
|||||||
myAddress,
|
myAddress,
|
||||||
}) => {
|
}) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [isRunningPublicNode] = useAtom(isRunningPublicNodeAtom);
|
const [isRunningPublicNode] = useAtom(isRunningPublicNodeAtom);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -31,7 +31,13 @@ export const HomeDesktop = ({
|
|||||||
const [checked1, setChecked1] = useState(false);
|
const [checked1, setChecked1] = useState(false);
|
||||||
const [checked2, setChecked2] = useState(false);
|
const [checked2, setChecked2] = useState(false);
|
||||||
|
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -10,7 +10,13 @@ export const InviteMember = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
|||||||
const [value, setValue] = useState('');
|
const [value, setValue] = useState('');
|
||||||
const [expiryTime, setExpiryTime] = useState<string>('259200');
|
const [expiryTime, setExpiryTime] = useState<string>('259200');
|
||||||
const [isLoadingInvite, setIsLoadingInvite] = useState(false);
|
const [isLoadingInvite, setIsLoadingInvite] = useState(false);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const inviteMember = async () => {
|
const inviteMember = async () => {
|
||||||
try {
|
try {
|
||||||
|
@ -56,7 +56,13 @@ export const ListOfBans = ({ groupId, setInfoSnack, setOpenSnack, show }) => {
|
|||||||
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
||||||
const listRef = useRef(null);
|
const listRef = useRef(null);
|
||||||
const [isLoadingUnban, setIsLoadingUnban] = useState(false);
|
const [isLoadingUnban, setIsLoadingUnban] = useState(false);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const getInvites = async (groupId) => {
|
const getInvites = async (groupId) => {
|
||||||
try {
|
try {
|
||||||
|
@ -91,7 +91,13 @@ export const ListOfGroupPromotions = () => {
|
|||||||
const { show } = useContext(QORTAL_APP_CONTEXT);
|
const { show } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const setTxList = useSetAtom(txListAtom);
|
const setTxList = useSetAtom(txListAtom);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const listRef = useRef(null);
|
const listRef = useRef(null);
|
||||||
const rowVirtualizer = useVirtualizer({
|
const rowVirtualizer = useVirtualizer({
|
||||||
count: promotions.length,
|
count: promotions.length,
|
||||||
|
@ -60,7 +60,13 @@ export const ListOfInvites = ({
|
|||||||
const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to
|
const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to
|
||||||
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
||||||
const [isLoadingCancelInvite, setIsLoadingCancelInvite] = useState(false);
|
const [isLoadingCancelInvite, setIsLoadingCancelInvite] = useState(false);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const listRef = useRef(null);
|
const listRef = useRef(null);
|
||||||
|
|
||||||
const getInvites = async (groupId) => {
|
const getInvites = async (groupId) => {
|
||||||
|
@ -64,7 +64,13 @@ export const ListOfJoinRequests = ({
|
|||||||
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
||||||
const listRef = useRef(null);
|
const listRef = useRef(null);
|
||||||
const [isLoadingAccept, setIsLoadingAccept] = useState(false);
|
const [isLoadingAccept, setIsLoadingAccept] = useState(false);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const getInvites = async (groupId) => {
|
const getInvites = async (groupId) => {
|
||||||
try {
|
try {
|
||||||
|
@ -42,7 +42,13 @@ const ListOfMembers = ({
|
|||||||
const [isLoadingMakeAdmin, setIsLoadingMakeAdmin] = useState(false);
|
const [isLoadingMakeAdmin, setIsLoadingMakeAdmin] = useState(false);
|
||||||
const [isLoadingRemoveAdmin, setIsLoadingRemoveAdmin] = useState(false);
|
const [isLoadingRemoveAdmin, setIsLoadingRemoveAdmin] = useState(false);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const listRef = useRef(null);
|
const listRef = useRef(null);
|
||||||
|
|
||||||
const handlePopoverOpen = (event, index) => {
|
const handlePopoverOpen = (event, index) => {
|
||||||
|
@ -14,7 +14,13 @@ import { useTranslation } from 'react-i18next';
|
|||||||
export const ListOfThreadPostsWatched = () => {
|
export const ListOfThreadPostsWatched = () => {
|
||||||
const [posts, setPosts] = useState([]);
|
const [posts, setPosts] = useState([]);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const getPosts = async () => {
|
const getPosts = async () => {
|
||||||
try {
|
try {
|
||||||
|
@ -71,7 +71,13 @@ export const ManageMembers = ({
|
|||||||
setValue(newValue);
|
setValue(newValue);
|
||||||
};
|
};
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const { show } = useContext(QORTAL_APP_CONTEXT);
|
const { show } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const setTxList = useSetAtom(txListAtom);
|
const setTxList = useSetAtom(txListAtom);
|
||||||
|
|
||||||
|
@ -54,7 +54,13 @@ export const QMailMessages = ({ userName, userAddress }) => {
|
|||||||
|
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const getMails = useCallback(async () => {
|
const getMails = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
|
@ -87,7 +87,13 @@ export const Settings = ({ open, setOpen, rawWallet }) => {
|
|||||||
const [checked, setChecked] = useState(false);
|
const [checked, setChecked] = useState(false);
|
||||||
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
const [isEnabledDevMode, setIsEnabledDevMode] = useAtom(enabledDevModeAtom);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
|
const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
|
||||||
setChecked(event.target.checked);
|
setChecked(event.target.checked);
|
||||||
@ -235,7 +241,13 @@ const ExportPrivateKey = ({ rawWallet }) => {
|
|||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const { setOpenSnackGlobal, setInfoSnackCustom } =
|
const { setOpenSnackGlobal, setInfoSnackCustom } =
|
||||||
useContext(QORTAL_APP_CONTEXT);
|
useContext(QORTAL_APP_CONTEXT);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const exportPrivateKeyFunc = async () => {
|
const exportPrivateKeyFunc = async () => {
|
||||||
try {
|
try {
|
||||||
|
@ -61,7 +61,13 @@ export const UserListOfInvites = ({
|
|||||||
const [invites, setInvites] = useState<any[]>([]);
|
const [invites, setInvites] = useState<any[]>([]);
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to
|
const [popoverAnchor, setPopoverAnchor] = useState(null); // Track which list item the popover is anchored to
|
||||||
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
const [openPopoverIndex, setOpenPopoverIndex] = useState(null); // Track which list item has the popover open
|
||||||
const listRef = useRef(null);
|
const listRef = useRef(null);
|
||||||
|
@ -15,7 +15,13 @@ import { useAtom } from 'jotai';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
export const WalletsAppWrapper = () => {
|
export const WalletsAppWrapper = () => {
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const iframeRef = useRef(null);
|
const iframeRef = useRef(null);
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const [navigationController, setNavigationController] = useAtom(
|
const [navigationController, setNavigationController] = useAtom(
|
||||||
|
@ -45,7 +45,13 @@ export const MainAvatar = ({ myName, balance, setOpenSnack, setInfoSnack }) => {
|
|||||||
const open = Boolean(anchorEl);
|
const open = Boolean(anchorEl);
|
||||||
const id = open ? 'avatar-img' : undefined;
|
const id = open ? 'avatar-img' : undefined;
|
||||||
|
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const checkIfAvatarExists = async () => {
|
const checkIfAvatarExists = async () => {
|
||||||
try {
|
try {
|
||||||
@ -258,7 +264,13 @@ const PopoverComp = ({
|
|||||||
myName,
|
myName,
|
||||||
}) => {
|
}) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover
|
<Popover
|
||||||
|
@ -45,7 +45,13 @@ export const Minting = ({ setIsOpenMinting, myAddress, show }) => {
|
|||||||
const { show: showKey, message } = useModal();
|
const { show: showKey, message } = useModal();
|
||||||
const { isShow: isShowNext, onOk, show: showNext } = useModal();
|
const { isShow: isShowNext, onOk, show: showNext } = useModal();
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [info, setInfo] = useState(null);
|
const [info, setInfo] = useState(null);
|
||||||
const [names, setNames] = useState({});
|
const [names, setNames] = useState({});
|
||||||
const [accountInfos, setAccountInfos] = useState({});
|
const [accountInfos, setAccountInfos] = useState({});
|
||||||
|
@ -3,7 +3,13 @@ import { Spacer } from '../common/Spacer';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
export const NewUsersCTA = ({ balance }) => {
|
export const NewUsersCTA = ({ balance }) => {
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
if (balance === undefined || +balance > 0) return null;
|
if (balance === undefined || +balance > 0) return null;
|
||||||
|
|
||||||
|
@ -8,7 +8,13 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { useAtom } from 'jotai';
|
import { useAtom } from 'jotai';
|
||||||
|
|
||||||
export const QMailStatus = () => {
|
export const QMailStatus = () => {
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
const [lastEnteredTimestamp, setLastEnteredTimestamp] = useAtom(
|
const [lastEnteredTimestamp, setLastEnteredTimestamp] = useAtom(
|
||||||
|
@ -7,7 +7,13 @@ import { useTranslation } from 'react-i18next';
|
|||||||
|
|
||||||
export const QortPayment = ({ balance, show, onSuccess, defaultPaymentTo }) => {
|
export const QortPayment = ({ balance, show, onSuccess, defaultPaymentTo }) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [paymentTo, setPaymentTo] = useState<string>(defaultPaymentTo);
|
const [paymentTo, setPaymentTo] = useState<string>(defaultPaymentTo);
|
||||||
const [paymentAmount, setPaymentAmount] = useState<number>(0);
|
const [paymentAmount, setPaymentAmount] = useState<number>(0);
|
||||||
const [paymentPassword, setPaymentPassword] = useState<string>('');
|
const [paymentPassword, setPaymentPassword] = useState<string>('');
|
||||||
|
@ -51,7 +51,13 @@ export const RegisterName = ({
|
|||||||
);
|
);
|
||||||
const [nameFee, setNameFee] = useState(null);
|
const [nameFee, setNameFee] = useState(null);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const checkIfNameExisits = async (name) => {
|
const checkIfNameExisits = async (name) => {
|
||||||
if (!name?.trim()) {
|
if (!name?.trim()) {
|
||||||
setIsNameAvailable(Availability.NULL);
|
setIsNameAvailable(Availability.NULL);
|
||||||
|
@ -84,7 +84,13 @@ export const Save = ({ isDesktop, disableWidth, myName }) => {
|
|||||||
const [anchorEl, setAnchorEl] = useState(null);
|
const [anchorEl, setAnchorEl] = useState(null);
|
||||||
const { show } = useContext(QORTAL_APP_CONTEXT);
|
const { show } = useContext(QORTAL_APP_CONTEXT);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const hasChanged = useMemo(() => {
|
const hasChanged = useMemo(() => {
|
||||||
const newChanges = {
|
const newChanges = {
|
||||||
|
@ -82,7 +82,13 @@ export default function ThemeManager() {
|
|||||||
});
|
});
|
||||||
const [currentTab, setCurrentTab] = useState('light');
|
const [currentTab, setCurrentTab] = useState('light');
|
||||||
const nameInputRef = useRef(null);
|
const nameInputRef = useRef(null);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (openEditor && nameInputRef.current) {
|
if (openEditor && nameInputRef.current) {
|
||||||
|
@ -5,7 +5,13 @@ import DarkModeIcon from '@mui/icons-material/DarkMode';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
const ThemeSelector = () => {
|
const ThemeSelector = () => {
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const { themeMode, toggleTheme } = useThemeContext();
|
const { themeMode, toggleTheme } = useThemeContext();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -49,7 +49,13 @@ function formatAddress(str) {
|
|||||||
|
|
||||||
export const UserLookup = ({ isOpenDrawerLookup, setIsOpenDrawerLookup }) => {
|
export const UserLookup = ({ isOpenDrawerLookup, setIsOpenDrawerLookup }) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [nameOrAddress, setNameOrAddress] = useState('');
|
const [nameOrAddress, setNameOrAddress] = useState('');
|
||||||
const [inputValue, setInputValue] = useState('');
|
const [inputValue, setInputValue] = useState('');
|
||||||
const { results, isLoading } = useNameSearch(inputValue);
|
const { results, isLoading } = useNameSearch(inputValue);
|
||||||
|
@ -14,7 +14,13 @@ import { useTranslation } from 'react-i18next';
|
|||||||
|
|
||||||
export const WrapperUserAction = ({ children, address, name, disabled }) => {
|
export const WrapperUserAction = ({ children, address, name, disabled }) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
const [isRunningPublicNode] = useAtom(isRunningPublicNodeAtom);
|
const [isRunningPublicNode] = useAtom(isRunningPublicNodeAtom);
|
||||||
|
|
||||||
const [anchorEl, setAnchorEl] = useState(null);
|
const [anchorEl, setAnchorEl] = useState(null);
|
||||||
@ -177,7 +183,13 @@ const BlockUser = ({ address, name, handleClose }) => {
|
|||||||
const { isUserBlocked, addToBlockList, removeBlockFromList } =
|
const { isUserBlocked, addToBlockList, removeBlockFromList } =
|
||||||
useContext(QORTAL_APP_CONTEXT);
|
useContext(QORTAL_APP_CONTEXT);
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!address) return;
|
if (!address) return;
|
||||||
|
@ -22,7 +22,13 @@ export const useHandlePrivateApps = () => {
|
|||||||
} = useContext(QORTAL_APP_CONTEXT);
|
} = useContext(QORTAL_APP_CONTEXT);
|
||||||
const setSortablePinnedApps = useSetAtom(sortablePinnedAppsAtom);
|
const setSortablePinnedApps = useSetAtom(sortablePinnedAppsAtom);
|
||||||
const setSettingsLocalLastUpdated = useSetAtom(settingsLocalLastUpdatedAtom);
|
const setSettingsLocalLastUpdated = useSetAtom(settingsLocalLastUpdatedAtom);
|
||||||
const { t } = useTranslation(['auth', 'core', 'group']);
|
const { t } = useTranslation([
|
||||||
|
'auth',
|
||||||
|
'core',
|
||||||
|
'group',
|
||||||
|
'question',
|
||||||
|
'tutorial',
|
||||||
|
]);
|
||||||
|
|
||||||
const openApp = async (
|
const openApp = async (
|
||||||
privateAppProperties,
|
privateAppProperties,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user