1
0
Fork 0
mirror of https://github.com/pawelmalak/flame.git synced 2025-07-20 03:59:36 +02:00
flame/client/src/components/Apps/AppCard/AppCard.tsx

65 lines
1.5 KiB
TypeScript
Raw Normal View History

2021-05-09 18:36:55 +02:00
import classes from './AppCard.module.css';
import Icon from '../../UI/Icons/Icon/Icon';
import { iconParser, urlParser } from '../../../utility';
2021-05-09 18:36:55 +02:00
2021-10-22 13:31:02 +02:00
import { App, Config, GlobalState } from '../../../interfaces';
import { connect } from 'react-redux';
2021-05-10 19:02:16 +02:00
interface ComponentProps {
app: App;
pinHandler?: Function;
2021-10-22 13:31:02 +02:00
config: Config;
2021-05-10 19:02:16 +02:00
}
const AppCard = (props: ComponentProps): JSX.Element => {
const [displayUrl, redirectUrl] = urlParser(props.app.url);
2021-08-06 15:15:54 +02:00
let iconEl: JSX.Element;
const { icon } = props.app;
if (/.(jpeg|jpg|png)$/i.test(icon)) {
iconEl = (
<img
src={`/uploads/${icon}`}
alt={`${props.app.name} icon`}
className={classes.CustomIcon}
/>
);
} else if (/.(svg)$/i.test(icon)) {
iconEl = (
<div className={classes.CustomIcon}>
<svg
data-src={`/uploads/${icon}`}
2021-10-22 13:31:02 +02:00
fill="var(--color-primary)"
2021-08-06 15:15:54 +02:00
className={classes.CustomIcon}
></svg>
</div>
);
} else {
iconEl = <Icon icon={iconParser(icon)} />;
}
2021-05-09 18:36:55 +02:00
return (
<a
href={redirectUrl}
2021-10-22 13:31:02 +02:00
target={props.config.appsSameTab ? '' : '_blank'}
rel="noreferrer"
className={classes.AppCard}
>
2021-08-06 15:15:54 +02:00
<div className={classes.AppCardIcon}>{iconEl}</div>
2021-05-09 18:36:55 +02:00
<div className={classes.AppCardDetails}>
2021-05-10 19:02:16 +02:00
<h5>{props.app.name}</h5>
<span>{displayUrl}</span>
2021-05-09 18:36:55 +02:00
</div>
</a>
2021-08-06 15:15:54 +02:00
);
};
2021-05-09 18:36:55 +02:00
2021-10-22 13:31:02 +02:00
const mapStateToProps = (state: GlobalState) => {
return {
config: state.config.config,
};
};
export default connect(mapStateToProps)(AppCard);