) => {
const configError = useCallback(() => {
return (
{t('app.app.errorHeader')}
{t('app.app.configErrors')}:
{config.error}
{t('app.app.checkConfigYml')}
);
}, [config.error, t]);
const handleLogin = useCallback(
(credentials: Credentials) => {
loginUser(credentials);
},
[loginUser],
);
const AuthComponent = useMemo(() => {
if (!config.config) {
return null;
}
const backend = currentBackend(config.config);
return backend?.authComponent();
}, [config.config]);
const authenticationPage = useMemo(() => {
if (!config.config) {
return null;
}
if (AuthComponent == null) {
return (
{t('app.app.waitingBackend')}
);
}
return (
history.replace('/')}
t={t}
/>
);
}, [AuthComponent, auth.error, auth.isFetching, config.config, handleLogin, t]);
const defaultPath = useMemo(() => getDefaultPath(collections), [collections]);
if (!config.config) {
return null;
}
if (config.error) {
return configError();
}
if (config.isFetching) {
return {t('app.app.loadingConfig')};
}
if (!user) {
return authenticationPage;
}
return (
<>
<>
{isFetching && }
} />
} />
} />
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
} />
} />
{useMediaLibrary ? : null}
>
>
);
};
function mapStateToProps(state: RootState) {
const { auth, config, collections, globalUI, mediaLibrary, scroll } = state;
const user = auth.user;
const isFetching = globalUI.isFetching;
const useMediaLibrary = !mediaLibrary.externalLibrary;
const scrollSyncEnabled = scroll.isScrolling;
return {
auth,
config,
collections,
user,
isFetching,
useMediaLibrary,
scrollSyncEnabled,
};
}
const mapDispatchToProps = {
loginUser: loginUserAction,
};
const connector = connect(mapStateToProps, mapDispatchToProps);
export type AppProps = ConnectedProps;
export default connector(translate()(App) as ComponentType);