feat(#28): persist last-used break settings in localStorage
- Preload BreakRule and BreakOrder steps from localStorage defaults - Save selections (rule, first, second) when chosen to speed future setup Refs #28
This commit is contained in:
@@ -836,12 +836,14 @@ interface BreakOrderStepProps {
|
|||||||
rule: BreakRule;
|
rule: BreakRule;
|
||||||
onNext: (first: number, second?: number) => void;
|
onNext: (first: number, second?: number) => void;
|
||||||
onCancel: () => void;
|
onCancel: () => void;
|
||||||
|
initialFirst?: number;
|
||||||
|
initialSecond?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const BreakOrderStep = ({ players, rule, onNext, onCancel }: BreakOrderStepProps) => {
|
const BreakOrderStep = ({ players, rule, onNext, onCancel, initialFirst = 1, initialSecond }: BreakOrderStepProps) => {
|
||||||
const playerCount = players.filter(Boolean).length;
|
const playerCount = players.filter(Boolean).length;
|
||||||
const [first, setFirst] = useState<number>(1);
|
const [first, setFirst] = useState<number>(initialFirst);
|
||||||
const [second, setSecond] = useState<number>(playerCount >= 2 ? 2 : 1);
|
const [second, setSecond] = useState<number>(initialSecond ?? (playerCount >= 2 ? 2 : 1));
|
||||||
|
|
||||||
const handleFirst = (idx: number) => {
|
const handleFirst = (idx: number) => {
|
||||||
setFirst(idx);
|
setFirst(idx);
|
||||||
|
|||||||
@@ -49,12 +49,17 @@ export default function NewGameScreen({
|
|||||||
|
|
||||||
const handleBreakRuleNext = (rule: 'winnerbreak' | 'wechselbreak') => {
|
const handleBreakRuleNext = (rule: 'winnerbreak' | 'wechselbreak') => {
|
||||||
onDataChange({ breakRule: rule });
|
onDataChange({ breakRule: rule });
|
||||||
|
try { localStorage.setItem('lastBreakRule', rule); } catch {}
|
||||||
onStepChange('breakOrder');
|
onStepChange('breakOrder');
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleBreakOrderNext = (first: number, second?: number) => {
|
const handleBreakOrderNext = (first: number, second?: number) => {
|
||||||
const finalData = { ...data, breakFirst: first, breakSecond: second ?? '' } as any;
|
const finalData = { ...data, breakFirst: first, breakSecond: second ?? '' } as any;
|
||||||
onDataChange({ breakFirst: first, breakSecond: second ?? '' });
|
onDataChange({ breakFirst: first, breakSecond: second ?? '' });
|
||||||
|
try {
|
||||||
|
localStorage.setItem('lastBreakFirst', String(first));
|
||||||
|
if (second) localStorage.setItem('lastBreakSecond', String(second));
|
||||||
|
} catch {}
|
||||||
onCreateGame(finalData as any);
|
onCreateGame(finalData as any);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -139,7 +144,7 @@ export default function NewGameScreen({
|
|||||||
<BreakRuleStep
|
<BreakRuleStep
|
||||||
onNext={handleBreakRuleNext}
|
onNext={handleBreakRuleNext}
|
||||||
onCancel={handleStepBack}
|
onCancel={handleStepBack}
|
||||||
initialValue={(data.breakRule as any) || 'winnerbreak'}
|
initialValue={(data.breakRule as any) || (typeof window !== 'undefined' ? (localStorage.getItem('lastBreakRule') as any) : 'winnerbreak') || 'winnerbreak'}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@@ -149,6 +154,8 @@ export default function NewGameScreen({
|
|||||||
rule={(data.breakRule as any) || 'winnerbreak'}
|
rule={(data.breakRule as any) || 'winnerbreak'}
|
||||||
onNext={handleBreakOrderNext}
|
onNext={handleBreakOrderNext}
|
||||||
onCancel={handleStepBack}
|
onCancel={handleStepBack}
|
||||||
|
initialFirst={(typeof window !== 'undefined' && localStorage.getItem('lastBreakFirst')) ? parseInt(localStorage.getItem('lastBreakFirst')!, 10) : 1}
|
||||||
|
initialSecond={(typeof window !== 'undefined' && localStorage.getItem('lastBreakSecond')) ? parseInt(localStorage.getItem('lastBreakSecond')!, 10) : undefined}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</Screen>
|
</Screen>
|
||||||
|
|||||||
Reference in New Issue
Block a user