// Forge modal — create a new mission const DAYS = [ { key: 'seg', label: 'Seg' }, { key: 'ter', label: 'Ter' }, { key: 'qua', label: 'Qua' }, { key: 'qui', label: 'Qui' }, { key: 'sex', label: 'Sex' }, { key: 'sab', label: 'Sab' }, { key: 'dom', label: 'Dom' }, ]; const DAY_ORDER = DAYS.map((d) => d.key); const recurrenceLabel = (rec) => { if (!rec) return null; if (rec === 'daily') return 'Todo dia'; if (rec === 'weekdays') return 'Seg – Sex'; if (rec === 'weekend') return 'Sab – Dom'; const map = { seg:'Seg', ter:'Ter', qua:'Qua', qui:'Qui', sex:'Sex', sab:'Sab', dom:'Dom' }; return rec.split(',').map((d) => map[d] || d).join(', '); }; const computeRec = (days) => { const sorted = [...days].sort((a, b) => DAY_ORDER.indexOf(a) - DAY_ORDER.indexOf(b)); if (sorted.length === 7) return 'daily'; const wd = ['seg','ter','qua','qui','sex']; if (sorted.length === 5 && wd.every((d) => sorted.includes(d))) return 'weekdays'; if (sorted.length === 2 && ['sab','dom'].every((d) => sorted.includes(d))) return 'weekend'; return sorted.join(','); }; window.recurrenceLabel = recurrenceLabel; const Forge = ({ onClose, onCreate }) => { const [title, setTitle] = React.useState(''); const [desc, setDesc] = React.useState(''); const [rarity, setRarity] = React.useState('rare'); const [category, setCategory] = React.useState('work'); const [recurring, setRecurring] = React.useState(false); const [deadline, setDeadline] = React.useState('Hoje'); const [selectedDays, setSelectedDays] = React.useState(['seg','ter','qua','qui','sex']); const xp = DIFFICULTIES.find((d) => d.id === rarity).xp; const toggleDay = (day) => setSelectedDays((days) => days.includes(day) ? days.length > 1 ? days.filter((d) => d !== day) : days : [...days, day] ); const setPreset = (preset) => { if (preset === 'all') setSelectedDays(['seg','ter','qua','qui','sex','sab','dom']); if (preset === 'weekdays') setSelectedDays(['seg','ter','qua','qui','sex']); if (preset === 'weekend') setSelectedDays(['sab','dom']); }; const submit = () => { if (!title.trim()) return; if (recurring && selectedDays.length === 0) return; const recurrence = recurring ? computeRec(selectedDays) : null; onCreate({ title: title.trim(), desc: desc.trim() || 'Sem descrição', rarity, category, deadline, recurrence }); onClose(); }; const isAllDays = selectedDays.length === 7; const isWeekdaysPre = selectedDays.length === 5 && ['seg','ter','qua','qui','sex'].every((d) => selectedDays.includes(d)); const isWeekendPre = selectedDays.length === 2 && ['sab','dom'].every((d) => selectedDays.includes(d)); return (
e.stopPropagation()}>
Forja de missões

Forjar nova missão

Defina o objetivo, a categoria e como ela se repete.

setTitle(e.target.value)} autoFocus />