mirror of
https://github.com/pawelmalak/flame.git
synced 2025-07-23 13:29:35 +02:00
Some changes on how application list is being rendered. Added isDay property on WeatherIcon to render icon accordingly to time of day. Modal can now be closed by clicking on backdrop
This commit is contained in:
parent
e170f56a03
commit
28683e7511
6 changed files with 37 additions and 8 deletions
|
@ -22,7 +22,7 @@ const App = (): JSX.Element => {
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route exact path='/' component={Home} />
|
<Route exact path='/' component={Home} />
|
||||||
<Route path='/settings' component={Settings} />
|
<Route path='/settings' component={Settings} />
|
||||||
<Route path='/apps' component={Apps} />
|
<Route path='/applications' component={Apps} />
|
||||||
</Switch>
|
</Switch>
|
||||||
</BrowserRouter>
|
</BrowserRouter>
|
||||||
</Provider>
|
</Provider>
|
||||||
|
|
|
@ -2,3 +2,12 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.AppsMessage {
|
||||||
|
color: var(--color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.AppsMessage a {
|
||||||
|
color: var(--color-accent);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
|
@ -36,7 +36,9 @@ const Apps = (props: ComponentProps): JSX.Element => {
|
||||||
const [isInEdit, setIsInEdit] = useState(false);
|
const [isInEdit, setIsInEdit] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
props.getApps();
|
if (props.apps.length === 0) {
|
||||||
|
props.getApps();
|
||||||
|
}
|
||||||
}, [props.getApps]);
|
}, [props.getApps]);
|
||||||
|
|
||||||
const toggleModal = (): void => {
|
const toggleModal = (): void => {
|
||||||
|
@ -49,12 +51,12 @@ const Apps = (props: ComponentProps): JSX.Element => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Modal isOpen={modalIsOpen}>
|
<Modal isOpen={modalIsOpen} setIsOpen={setModalIsOpen}>
|
||||||
<AppForm modalHandler={toggleModal} />
|
<AppForm modalHandler={toggleModal} />
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
<Headline
|
<Headline
|
||||||
title='All Apps'
|
title='All Applications'
|
||||||
subtitle={(<Link to='/'>Go back</Link>)}
|
subtitle={(<Link to='/'>Go back</Link>)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
@ -75,7 +77,9 @@ const Apps = (props: ComponentProps): JSX.Element => {
|
||||||
{props.loading
|
{props.loading
|
||||||
? <Spinner />
|
? <Spinner />
|
||||||
: (!isInEdit
|
: (!isInEdit
|
||||||
? <AppGrid apps={props.apps} />
|
? props.apps.length > 0
|
||||||
|
? <AppGrid apps={props.apps} />
|
||||||
|
: <p className={classes.AppsMessage}>You don't have any applications. You can a new one from <Link to='/applications'>/application</Link> menu</p>
|
||||||
: <AppTable />)
|
: <AppTable />)
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -7,10 +7,13 @@ import { IconMapping, TimeOfDay } from './IconMapping';
|
||||||
interface ComponentProps {
|
interface ComponentProps {
|
||||||
theme: Theme;
|
theme: Theme;
|
||||||
weatherStatusCode: number;
|
weatherStatusCode: number;
|
||||||
|
isDay: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const WeatherIcon = (props: ComponentProps): JSX.Element => {
|
const WeatherIcon = (props: ComponentProps): JSX.Element => {
|
||||||
const icon = (new IconMapping).mapIcon(props.weatherStatusCode, TimeOfDay.day);
|
const icon = props.isDay
|
||||||
|
? (new IconMapping).mapIcon(props.weatherStatusCode, TimeOfDay.day)
|
||||||
|
: (new IconMapping).mapIcon(props.weatherStatusCode, TimeOfDay.night);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const delay = setTimeout(() => {
|
const delay = setTimeout(() => {
|
||||||
|
|
|
@ -1,15 +1,25 @@
|
||||||
|
import { MouseEvent, useRef, useEffect } from 'react';
|
||||||
|
|
||||||
import classes from './Modal.module.css';
|
import classes from './Modal.module.css';
|
||||||
|
|
||||||
interface ComponentProps {
|
interface ComponentProps {
|
||||||
isOpen: boolean;
|
isOpen: boolean;
|
||||||
|
setIsOpen: Function;
|
||||||
children: JSX.Element;
|
children: JSX.Element;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Modal = (props: ComponentProps): JSX.Element => {
|
const Modal = (props: ComponentProps): JSX.Element => {
|
||||||
|
const modalRef = useRef(null);
|
||||||
const modalClasses = [classes.Modal, props.isOpen ? classes.ModalOpen : classes.ModalClose].join(' ');
|
const modalClasses = [classes.Modal, props.isOpen ? classes.ModalOpen : classes.ModalClose].join(' ');
|
||||||
|
|
||||||
|
const clickHandler = (e: MouseEvent) => {
|
||||||
|
if (e.target === modalRef.current) {
|
||||||
|
props.setIsOpen(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={modalClasses}>
|
<div className={modalClasses} onClick={clickHandler} ref={modalRef}>
|
||||||
{props.children}
|
{props.children}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|
|
@ -36,7 +36,10 @@ const WeatherWidget = (): JSX.Element => {
|
||||||
: (
|
: (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<div className={classes.WeatherIcon}>
|
<div className={classes.WeatherIcon}>
|
||||||
<WeatherIcon weatherStatusCode={weather.conditionCode} />
|
<WeatherIcon
|
||||||
|
weatherStatusCode={weather.conditionCode}
|
||||||
|
isDay={weather.isDay}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={classes.WeatherDetails}>
|
<div className={classes.WeatherDetails}>
|
||||||
<span>{weather.tempC}°C</span>
|
<span>{weather.tempC}°C</span>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue