File size: 2,316 Bytes
f56a29b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | /**
* Stage API - Mode & Stage Meta Management
*
* Factory functions that create the mode and stage namespaces of the Stage API.
*/
import type { Stage, StageMode } from '@/lib/types/stage';
import type { StageStore, APIResult } from './stage-api-types';
/**
* Create the mode management API
*
* @param store - Zustand store instance
* @returns Mode namespace API
*/
export function createModeAPI(store: StageStore) {
return {
/**
* Set mode
*
* @param newMode - New mode
*/
set(newMode: StageMode): APIResult<boolean> {
try {
store.setState({ mode: newMode });
return { success: true, data: true };
} catch (error) {
return { success: false, error: String(error) };
}
},
/**
* Get current mode
*
* @returns Current mode
*/
get(): APIResult<StageMode> {
try {
const state = store.getState();
return { success: true, data: state.mode };
} catch (error) {
return { success: false, error: String(error) };
}
},
};
}
/**
* Create the stage meta management API
*
* @param store - Zustand store instance
* @returns Stage namespace API
*/
export function createStageMetaAPI(store: StageStore) {
return {
/**
* Get Stage info
*
* @returns Stage object
*/
get(): APIResult<Stage> {
try {
const state = store.getState();
if (!state.stage) {
return { success: false, error: 'No stage' };
}
return { success: true, data: state.stage };
} catch (error) {
return { success: false, error: String(error) };
}
},
/**
* Update Stage info
*
* @param updates - Fields to update
* @returns Whether successful
*/
update(updates: Partial<Stage>): APIResult<boolean> {
try {
const state = store.getState();
if (!state.stage) {
return { success: false, error: 'No stage' };
}
const newStage = {
...state.stage,
...updates,
updatedAt: Date.now(),
};
store.setState({ stage: newStage });
return { success: true, data: true };
} catch (error) {
return { success: false, error: String(error) };
}
},
};
}
|