mirror of
https://github.com/morten-olsen/bob-the-algorithm.git
synced 2026-02-08 00:46:25 +01:00
init
This commit is contained in:
82
src/ui/screens/plan/set.tsx
Normal file
82
src/ui/screens/plan/set.tsx
Normal file
@@ -0,0 +1,82 @@
|
||||
import { useLocations, useSetLocation } from "#/features/location";
|
||||
import { useNavigation, useRoute } from '@react-navigation/native';
|
||||
import { Button, Checkbok, TextInput } from "#/ui/components";
|
||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||
import { nanoid } from 'nanoid';
|
||||
import { useAgendaContext, useSetAgendaContext } from "#/features/agenda-context";
|
||||
import { format } from "date-fns";
|
||||
import Popup from "#/ui/components/popup";
|
||||
|
||||
const AgendaContextSetScreen: React.FC = () => {
|
||||
const { params = {} } = useRoute() as any;
|
||||
const id = useMemo(
|
||||
() => params.id || nanoid(),
|
||||
[params.id],
|
||||
)
|
||||
const contexts = useAgendaContext();
|
||||
const { navigate, goBack } = useNavigation();
|
||||
const locations = useLocations();
|
||||
const [location, setLocation] = useState('');
|
||||
const [enabled, setEnabled] = useState(true);
|
||||
const [startMin, setStartMin] = useState('');
|
||||
const [startMax, setStartMax] = useState('');
|
||||
const [duration, setDuration] = useState('');
|
||||
const [count, setCount] = useState('1');
|
||||
const [set] = useSetAgendaContext();
|
||||
|
||||
useEffect(
|
||||
() => {
|
||||
const current = contexts[id];
|
||||
if (!current) {
|
||||
return;
|
||||
}
|
||||
const name = current.locations?.map(l => l.title).join(',') || '';
|
||||
if (current.startMin) {
|
||||
setStartMin(format(current.startMin, 'HH:mm'));
|
||||
}
|
||||
if (current.startMax) {
|
||||
setStartMax(format(current.startMax, 'HH:mm'));
|
||||
}
|
||||
if (current.duration) {
|
||||
setDuration((current.duration / 1000 / 60).toString());
|
||||
}
|
||||
if (current.count) {
|
||||
setCount(current.count.toString());
|
||||
}
|
||||
setLocation(name);
|
||||
setEnabled(current.enabled);
|
||||
},
|
||||
[contexts, id],
|
||||
)
|
||||
|
||||
const save = useCallback(
|
||||
() => {
|
||||
const name = location.split(',').map(a => Object.values(locations).find(i => i.title.toLowerCase() === a.trim().toLowerCase())).filter(Boolean);
|
||||
set(id, {
|
||||
enabled,
|
||||
locations: name as any,
|
||||
count: parseInt(count),
|
||||
startMin: startMin ? new Date(`2020-01-01T${startMin}:00`) : undefined,
|
||||
startMax: startMax ? new Date(`2020-01-01T${startMax}:00`) : undefined,
|
||||
duration: duration ? parseInt(duration) * 1000 * 60 : undefined,
|
||||
});
|
||||
navigate('main');
|
||||
},
|
||||
[set, id, enabled, location, count, locations, startMin, startMax, duration],
|
||||
)
|
||||
|
||||
return (
|
||||
<Popup onClose={goBack}>
|
||||
<TextInput value={location} onChangeText={setLocation} placeholder="Locations" />
|
||||
<TextInput value={startMin} onChangeText={setStartMin} placeholder="Start min" />
|
||||
<TextInput value={startMax} onChangeText={setStartMax} placeholder="Start max" />
|
||||
<TextInput value={duration} onChangeText={setDuration} placeholder="Duration" />
|
||||
<TextInput value={count} onChangeText={setCount} placeholder="Count" />
|
||||
<Checkbok label="Enabled" value={enabled} onChange={setEnabled} />
|
||||
<Button title="Save" onPress={save} />
|
||||
</Popup>
|
||||
)
|
||||
}
|
||||
|
||||
export { AgendaContextSetScreen };
|
||||
|
||||
Reference in New Issue
Block a user