mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-22 05:51:12 -05:00
Refactor code structure and remove redundant changes
This commit is contained in:
91
src-old/lib/deletionDialogMachine.ts
Normal file
91
src-old/lib/deletionDialogMachine.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
export type DeletionStep = 'warning' | 'confirm' | 'code';
|
||||
|
||||
export type DeletionDialogState = {
|
||||
step: DeletionStep;
|
||||
confirmationCode: string;
|
||||
codeReceived: boolean;
|
||||
scheduledDate: string;
|
||||
isLoading: boolean;
|
||||
error: string | null;
|
||||
};
|
||||
|
||||
export type DeletionDialogAction =
|
||||
| { type: 'CONTINUE_TO_CONFIRM' }
|
||||
| { type: 'GO_BACK_TO_WARNING' }
|
||||
| { type: 'REQUEST_DELETION'; payload: { scheduledDate: string } }
|
||||
| { type: 'UPDATE_CODE'; payload: { code: string } }
|
||||
| { type: 'TOGGLE_CODE_RECEIVED' }
|
||||
| { type: 'SET_LOADING'; payload: boolean }
|
||||
| { type: 'SET_ERROR'; payload: string | null }
|
||||
| { type: 'RESET' };
|
||||
|
||||
export const initialState: DeletionDialogState = {
|
||||
step: 'warning',
|
||||
confirmationCode: '',
|
||||
codeReceived: false,
|
||||
scheduledDate: '',
|
||||
isLoading: false,
|
||||
error: null
|
||||
};
|
||||
|
||||
export function deletionDialogReducer(
|
||||
state: DeletionDialogState,
|
||||
action: DeletionDialogAction
|
||||
): DeletionDialogState {
|
||||
switch (action.type) {
|
||||
case 'CONTINUE_TO_CONFIRM':
|
||||
return { ...state, step: 'confirm' };
|
||||
|
||||
case 'GO_BACK_TO_WARNING':
|
||||
return { ...state, step: 'warning', error: null };
|
||||
|
||||
case 'REQUEST_DELETION':
|
||||
return {
|
||||
...state,
|
||||
step: 'code',
|
||||
scheduledDate: action.payload.scheduledDate,
|
||||
isLoading: false,
|
||||
error: null
|
||||
};
|
||||
|
||||
case 'UPDATE_CODE':
|
||||
// Only allow digits, max 6
|
||||
const sanitized = action.payload.code.replace(/\D/g, '').slice(0, 6);
|
||||
return { ...state, confirmationCode: sanitized };
|
||||
|
||||
case 'TOGGLE_CODE_RECEIVED':
|
||||
return { ...state, codeReceived: !state.codeReceived };
|
||||
|
||||
case 'SET_LOADING':
|
||||
return { ...state, isLoading: action.payload };
|
||||
|
||||
case 'SET_ERROR':
|
||||
return { ...state, error: action.payload, isLoading: false };
|
||||
|
||||
case 'RESET':
|
||||
return initialState;
|
||||
|
||||
default:
|
||||
// Exhaustive check
|
||||
const _exhaustive: never = action;
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
||||
// Validation helpers
|
||||
export const canProceedToConfirm = (state: DeletionDialogState): boolean => {
|
||||
return state.step === 'warning' && !state.isLoading;
|
||||
};
|
||||
|
||||
export const canRequestDeletion = (state: DeletionDialogState): boolean => {
|
||||
return state.step === 'confirm' && !state.isLoading;
|
||||
};
|
||||
|
||||
export const canConfirmDeletion = (state: DeletionDialogState): boolean => {
|
||||
return (
|
||||
state.step === 'code' &&
|
||||
state.confirmationCode.length === 6 &&
|
||||
state.codeReceived &&
|
||||
!state.isLoading
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user