Merge branch 'develop' into feature/large-files-and-names

This commit is contained in:
nico.benaz 2025-05-30 17:51:25 +02:00 committed by GitHub
commit d75bfa9fd5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 119 additions and 92 deletions

View File

@ -3866,8 +3866,8 @@ function App() {
}} }}
> >
<CustomButtonAccept <CustomButtonAccept
color="black" customColor="black"
bgColor={theme.palette.other.positive} customBgColor={theme.palette.other.positive}
sx={{ sx={{
minWidth: '102px', minWidth: '102px',
opacity: opacity:
@ -3903,8 +3903,8 @@ function App() {
</CustomButtonAccept> </CustomButtonAccept>
<CustomButtonAccept <CustomButtonAccept
color="black" customColor="black"
bgColor={theme.palette.other.danger} customBgColor={theme.palette.other.danger}
sx={{ sx={{
minWidth: '102px', minWidth: '102px',
}} }}

View File

@ -30,14 +30,14 @@ export const NavCloseTab: React.FC<SVGProps> = ({
<path <path
d="M5.66675 5.66669L11.3334 11.3334" d="M5.66675 5.66669L11.3334 11.3334"
stroke={theme.palette.text.primary} stroke={theme.palette.text.primary}
stroke-width="2" strokeWidth="2"
fill={setColor} fill={setColor}
fillOpacity={setOpacity} fillOpacity={setOpacity}
/> />
<path <path
d="M11.3333 5.66675L5.66658 11.3334" d="M11.3333 5.66675L5.66658 11.3334"
stroke={theme.palette.text.primary} stroke={theme.palette.text.primary}
stroke-width="2" strokeWidth="2"
fill={setColor} fill={setColor}
fillOpacity={setOpacity} fillOpacity={setOpacity}
/> />

View File

@ -7,7 +7,14 @@ import { useQortalMessageListener } from '../../hooks/useQortalMessageListener';
import { useThemeContext } from '../Theme/ThemeContext'; import { useThemeContext } from '../Theme/ThemeContext';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
export const AppViewer = forwardRef( type AppViewerProps = {
app: any;
hide: boolean;
isDevMode: boolean;
skipAuth?: boolean;
};
export const AppViewer = forwardRef<HTMLIFrameElement, AppViewerProps>(
({ app, hide, isDevMode, skipAuth }, iframeRef) => { ({ app, hide, isDevMode, skipAuth }, iframeRef) => {
const { window: frameWindow } = useFrame(); const { window: frameWindow } = useFrame();
const { path, history, changeCurrentIndex, resetHistory } = const { path, history, changeCurrentIndex, resetHistory } =
@ -54,6 +61,7 @@ export const AppViewer = forwardRef(
setUrl(app.url + `&theme=${themeMode}&lang=${currentLang}`); setUrl(app.url + `&theme=${themeMode}&lang=${currentLang}`);
} }
}, [app?.url, app?.isPreview]); }, [app?.url, app?.isPreview]);
const defaultUrl = useMemo(() => { const defaultUrl = useMemo(() => {
return url; return url;
}, [url, isDevMode]); }, [url, isDevMode]);

View File

@ -2,8 +2,19 @@ import { forwardRef } from 'react';
import { AppViewer } from './AppViewer'; import { AppViewer } from './AppViewer';
import Frame from 'react-frame-component'; import Frame from 'react-frame-component';
const AppViewerContainer = forwardRef( type AppViewerContainerProps = {
({ app, isSelected, hide, isDevMode, customHeight, skipAuth }, ref) => { app: any;
isSelected: boolean;
hide: boolean;
isDevMode: boolean;
customHeight?: string;
skipAuth?: boolean;
};
const AppViewerContainer = forwardRef<
HTMLIFrameElement,
AppViewerContainerProps
>(({ app, isSelected, hide, isDevMode, customHeight, skipAuth }, ref) => {
return ( return (
<Frame <Frame
id={`browser-iframe-${app?.tabId}`} id={`browser-iframe-${app?.tabId}`}
@ -40,15 +51,14 @@ const AppViewerContainer = forwardRef(
}} }}
> >
<AppViewer <AppViewer
skipAuth={skipAuth}
app={app} app={app}
ref={ref}
hide={!isSelected || hide} hide={!isSelected || hide}
isDevMode={isDevMode} isDevMode={isDevMode}
ref={ref}
skipAuth={skipAuth}
/> />
</Frame> </Frame>
); );
} });
);
export default AppViewerContainer; export default AppViewerContainer;

View File

@ -530,12 +530,12 @@ export const AppsDesktop = ({
} }
return ( return (
<AppViewerContainer <AppViewerContainer
key={tab?.tabId}
hide={isNewTabWindow}
isSelected={tab?.tabId === selectedTab?.tabId}
app={tab} app={tab}
ref={iframeRefs.current[tab.tabId]} hide={isNewTabWindow}
isDevMode={tab?.service ? false : true} isDevMode={tab?.service ? false : true}
isSelected={tab?.tabId === selectedTab?.tabId}
key={tab?.tabId}
ref={iframeRefs.current[tab.tabId]}
/> />
); );
})} })}
@ -545,21 +545,21 @@ export const AppsDesktop = ({
<Box <Box
sx={{ sx={{
display: 'flex', display: 'flex',
width: '100%',
flexDirection: 'column', flexDirection: 'column',
height: '100vh', height: '100vh',
overflow: 'auto', overflow: 'auto',
width: '100%',
}} }}
> >
<Spacer height="30px" /> <Spacer height="30px" />
<AppsHomeDesktop <AppsHomeDesktop
myName={myName}
availableQapps={availableQapps} availableQapps={availableQapps}
setMode={setMode}
myApp={myApp} myApp={myApp}
myName={myName}
myWebsite={myWebsite} myWebsite={myWebsite}
myAddress={myAddress} myAddress={myAddress}
setMode={setMode}
/> />
</Box> </Box>
</> </>

View File

@ -67,7 +67,7 @@ export function saveToLocalStorage(key, subKey, newValue) {
export const AppsNavBarDesktop = ({ disableBack }) => { export const AppsNavBarDesktop = ({ disableBack }) => {
const [tabs, setTabs] = useState([]); const [tabs, setTabs] = useState([]);
const [selectedTab, setSelectedTab] = useState(null); const [selectedTab, setSelectedTab] = useState(0);
const [navigationController, setNavigationController] = useAtom( const [navigationController, setNavigationController] = useAtom(
navigationControllerAtom navigationControllerAtom
); );
@ -125,7 +125,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
const setTabsToNav = (e) => { const setTabsToNav = (e) => {
const { tabs, selectedTab, isNewTabWindow } = e.detail?.data; const { tabs, selectedTab, isNewTabWindow } = e.detail?.data;
setTabs([...tabs]); setTabs([...tabs]);
setSelectedTab(!selectedTab ? null : { ...selectedTab }); setSelectedTab(!selectedTab ? 0 : { ...selectedTab });
setIsNewTabWindow(isNewTabWindow); setIsNewTabWindow(isNewTabWindow);
}; };
@ -190,9 +190,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
<Tabs <Tabs
orientation="vertical" orientation="vertical"
ref={tabsRef} ref={tabsRef}
aria-label={t('core:basic_tabs_example', { aria-label={t('core:basic_tabs_example')}
postProcess: 'capitalizeFirstChar',
})}
variant="scrollable" // Make tabs scrollable variant="scrollable" // Make tabs scrollable
scrollButtons={true} scrollButtons={true}
sx={{ sx={{
@ -202,10 +200,11 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
maxHeight: `275px`, // Ensure the tabs container fits within the available space maxHeight: `275px`, // Ensure the tabs container fits within the available space
overflow: 'hidden', // Prevents overflow on small screens overflow: 'hidden', // Prevents overflow on small screens
}} }}
value={false}
> >
{tabs?.map((tab) => ( {tabs?.map((tab) => (
<Tab <Tab
key={tab.tabId} key={tab?.tabId}
label={ label={
<TabComponent <TabComponent
isSelected={ isSelected={
@ -237,7 +236,7 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
> >
<ButtonBase <ButtonBase
onClick={() => { onClick={() => {
setSelectedTab(null); setSelectedTab(0);
executeEvent('newTabWindow', {}); executeEvent('newTabWindow', {});
}} }}
> >
@ -408,7 +407,6 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
tabId: selectedTab?.tabId, tabId: selectedTab?.tabId,
}); });
} }
handleClose(); handleClose();
}} }}
> >
@ -434,7 +432,9 @@ export const AppsNavBarDesktop = ({ disableBack }) => {
color: theme.palette.text.primary, color: theme.palette.text.primary,
}, },
}} }}
primary="Refresh" primary={t('core:action.refresh', {
postProcess: 'capitalizeFirstChar',
})}
/> />
</MenuItem> </MenuItem>

View File

@ -632,7 +632,7 @@ export const AppsPrivate = ({ myName, myAddress }) => {
</Label> </Label>
<Label> <Label>
{t('group:amessage.generic.admin_only', { {t('group:message.generic.admin_only', {
postProcess: 'capitalizeFirstChar', postProcess: 'capitalizeFirstChar',
})} })}
</Label> </Label>

View File

@ -276,8 +276,8 @@ export const JoinGroup = () => {
disabled={isInGroup} disabled={isInGroup}
> >
<CustomButtonAccept <CustomButtonAccept
color="black" customColor="black"
bgColor={theme.palette.other.positive} customBgColor={theme.palette.other.positive}
sx={{ sx={{
minWidth: '102px', minWidth: '102px',
height: '45px', height: '45px',
@ -292,8 +292,8 @@ export const JoinGroup = () => {
</ButtonBase> </ButtonBase>
<CustomButtonAccept <CustomButtonAccept
color="black" customColor="black"
bgColor={theme.palette.other.danger} customBgColor={theme.palette.other.danger}
sx={{ sx={{
minWidth: '102px', minWidth: '102px',
height: '45px', height: '45px',

View File

@ -1726,6 +1726,7 @@ export const Group = ({
> >
{directs.map((direct: any) => ( {directs.map((direct: any) => (
<List <List
key={direct?.timestamp + direct?.sender}
sx={{ sx={{
width: '100%', width: '100%',
}} }}
@ -1756,15 +1757,15 @@ export const Group = ({
}, 200); }, 200);
}} }}
sx={{ sx={{
display: 'flex',
width: '100%',
flexDirection: 'column',
cursor: 'pointer',
padding: '2px',
borderRadius: '2px',
background: background:
direct?.address === selectedDirect?.address && direct?.address === selectedDirect?.address &&
theme.palette.background.default, theme.palette.background.default,
borderRadius: '2px',
cursor: 'pointer',
display: 'flex',
flexDirection: 'column',
padding: '2px',
width: '100%',
}} }}
> >
<Box <Box

View File

@ -68,6 +68,7 @@
"publish": "publish", "publish": "publish",
"publish_app": "publish your app", "publish_app": "publish your app",
"publish_comment": "publish comment", "publish_comment": "publish comment",
"refresh": "refresh",
"register_name": "register name", "register_name": "register name",
"remove": "remove", "remove": "remove",
"remove_reaction": "remove reaction", "remove_reaction": "remove reaction",

View File

@ -68,21 +68,22 @@
"publish_app": "publica tu aplicación", "publish_app": "publica tu aplicación",
"publish_comment": "publicar comentario", "publish_comment": "publicar comentario",
"register_name": "nombre de registro", "register_name": "nombre de registro",
"remove": "eliminar", "refresh": "refresca",
"remove_reaction": "eliminar la reacción", "remove": "elimina",
"remove_reaction": "elimina la reacción",
"return_apps_dashboard": "volver al tablero de aplicaciones", "return_apps_dashboard": "volver al tablero de aplicaciones",
"save": "ahorrar", "save": "ahorra",
"save_disk": "guardar en el disco", "save_disk": "guarda en el disco",
"search": "buscar", "search": "busca",
"search_apps": "buscar aplicaciones", "search_apps": "busca aplicaciones",
"search_groups": "buscar grupos", "search_groups": "busca grupos",
"search_chat_text": "search Chat Text", "search_chat_text": "busca Chat Text",
"select_app_type": "seleccionar el tipo de aplicación", "select_app_type": "selecciona el tipo de aplicación",
"select_category": "seleccionar categoría", "select_category": "selecciona categoría",
"select_name_app": "seleccionar nombre/aplicación", "select_name_app": "selecciona nombre/aplicación",
"send": "enviar", "send": "envia",
"send_qort": "enviar Qort", "send_qort": "envia Qort",
"set_avatar": "establecer avatar", "set_avatar": "establece avatar",
"show": "espectáculo", "show": "espectáculo",
"show_poll": "encuesta", "show_poll": "encuesta",
"start_minting": "empiece a acuñar", "start_minting": "empiece a acuñar",

View File

@ -67,6 +67,7 @@
"publish": "publier", "publish": "publier",
"publish_app": "publiez votre application", "publish_app": "publiez votre application",
"publish_comment": "publier un commentaire", "publish_comment": "publier un commentaire",
"refresh": "rafraîche",
"register_name": "nom de registre", "register_name": "nom de registre",
"remove": "retirer", "remove": "retirer",
"remove_reaction": "éliminer la réaction", "remove_reaction": "éliminer la réaction",

View File

@ -68,6 +68,7 @@
"publish": "pubblica", "publish": "pubblica",
"publish_app": "pubblica la tua app", "publish_app": "pubblica la tua app",
"publish_comment": "pubblica un commento", "publish_comment": "pubblica un commento",
"refresh": "aggiorna",
"register_name": "registra nome", "register_name": "registra nome",
"remove": "rimuovi", "remove": "rimuovi",
"remove_reaction": "rimuovi la reazione", "remove_reaction": "rimuovi la reazione",
@ -114,7 +115,7 @@
"apps_dashboard": "dashboard delle app", "apps_dashboard": "dashboard delle app",
"apps_official": "app ufficiali", "apps_official": "app ufficiali",
"attachment": "allegato", "attachment": "allegato",
"balance": "bilancia:", "balance": "bilancio:",
"basic_tabs_example": "esempio di schede base", "basic_tabs_example": "esempio di schede base",
"category": "categoria", "category": "categoria",
"category_other": "categorie", "category_other": "categorie",

View File

@ -67,6 +67,7 @@
"publish": "公開", "publish": "公開",
"publish_app": "アプリを公開します", "publish_app": "アプリを公開します",
"publish_comment": "コメントを公開します", "publish_comment": "コメントを公開します",
"refresh": "リフレッシュ",
"register_name": "登録名", "register_name": "登録名",
"remove": "取り除く", "remove": "取り除く",
"remove_reaction": "反応を取り除きます", "remove_reaction": "反応を取り除きます",

View File

@ -67,6 +67,7 @@
"publish": "публиковать", "publish": "публиковать",
"publish_app": "Публикуйте свое приложение", "publish_app": "Публикуйте свое приложение",
"publish_comment": "Публикуйте комментарий", "publish_comment": "Публикуйте комментарий",
"refresh": "освежить",
"register_name": "зарегистрировать имя", "register_name": "зарегистрировать имя",
"remove": "удалять", "remove": "удалять",
"remove_reaction": "удалить реакцию", "remove_reaction": "удалить реакцию",

View File

@ -67,6 +67,7 @@
"publish": "发布", "publish": "发布",
"publish_app": "发布您的应用", "publish_app": "发布您的应用",
"publish_comment": "发布评论", "publish_comment": "发布评论",
"refresh": "刷新",
"register_name": "登记名称", "register_name": "登记名称",
"remove": "消除", "remove": "消除",
"remove_reaction": "删除反应", "remove_reaction": "删除反应",

View File

@ -134,20 +134,21 @@ export const CustomButton = styled(Box)(({ theme }) => ({
})); }));
interface CustomButtonProps { interface CustomButtonProps {
bgColor?: string; customBgColor?: string;
color?: string; customColor?: string;
} }
export const CustomButtonAccept = styled(Box)<CustomButtonProps>( export const CustomButtonAccept = styled(Box)<CustomButtonProps>((props) => {
({ bgColor, color, theme }) => ({ const { customBgColor, customColor, theme } = props;
return {
alignItems: 'center', alignItems: 'center',
backgroundColor: bgColor || theme.palette.background.default, backgroundColor: customBgColor || theme.palette.background.default,
borderColor: theme.palette.background.paper, borderColor: theme.palette.background.paper,
borderRadius: 5, borderRadius: 5,
borderStyle: 'solid', borderStyle: 'solid',
borderWidth: '0.5px', borderWidth: '0.5px',
boxSizing: 'border-box', boxSizing: 'border-box',
color: color || theme.palette.background.default, color: customColor || theme.palette.background.default,
cursor: 'pointer', cursor: 'pointer',
display: 'inline-flex', display: 'inline-flex',
filter: 'drop-shadow(1px 4px 10.5px rgba(0,0,0,0.3))', filter: 'drop-shadow(1px 4px 10.5px rgba(0,0,0,0.3))',
@ -163,16 +164,16 @@ export const CustomButtonAccept = styled(Box)<CustomButtonProps>(
width: 'fit-content', width: 'fit-content',
'&:hover': { '&:hover': {
opacity: 1, opacity: 1,
backgroundColor: bgColor || theme.palette.background.default, backgroundColor: customBgColor || theme.palette.background.default,
color: color || '#fff', color: customColor || '#fff',
svg: { svg: {
path: { path: {
fill: color || '#fff', fill: customColor || '#fff',
}, },
}, },
}, },
}) };
); });
export const CustomInput = styled(TextField)(({ theme }) => ({ export const CustomInput = styled(TextField)(({ theme }) => ({
backgroundColor: theme.palette.background.default, backgroundColor: theme.palette.background.default,