mirror of
https://github.com/steel-dev/cli.git
synced 2026-09-14 20:47:34 +08:00
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import React, {createContext, useContext, useState, ReactNode} from 'react';
|
|
import {Template} from '../utils/types.js';
|
|
|
|
type ForgeStepContextType = {
|
|
step: string;
|
|
setStep: (step: string) => void;
|
|
template: Template | null;
|
|
setTemplate: (template: Template) => void;
|
|
envVars: Record<string, string>;
|
|
setEnvVars: (envVars: Record<string, string>) => void;
|
|
directory: string;
|
|
setDirectory: (dir: string) => void;
|
|
packageManager: string;
|
|
setPackageManager: (manager: string) => void;
|
|
sessionId: string | null;
|
|
setSessionId: (sessionId: string | null) => void;
|
|
};
|
|
|
|
const ForgeStepContext = createContext<ForgeStepContextType | undefined>(
|
|
undefined,
|
|
);
|
|
|
|
export const ForgeStepProvider = ({children}: {children: ReactNode}) => {
|
|
const [step, setStep] = useState<string>('template');
|
|
const [template, setTemplate] = useState<Template | null>(null);
|
|
const [directory, setDirectory] = useState<string>('steel-starter');
|
|
const [envVars, setEnvVars] = useState<Record<string, string>>({});
|
|
const [packageManager, setPackageManager] = useState<string>('npm');
|
|
const [sessionId, setSessionId] = useState<string | null>(null);
|
|
|
|
return (
|
|
<ForgeStepContext.Provider
|
|
value={{
|
|
step,
|
|
setStep,
|
|
template,
|
|
setTemplate,
|
|
envVars,
|
|
setEnvVars,
|
|
directory,
|
|
setDirectory,
|
|
packageManager,
|
|
setPackageManager,
|
|
sessionId,
|
|
setSessionId,
|
|
}}
|
|
>
|
|
{children}
|
|
</ForgeStepContext.Provider>
|
|
);
|
|
};
|
|
|
|
export const useForgeStep = () => {
|
|
const context = useContext(ForgeStepContext);
|
|
if (!context)
|
|
throw new Error('useForgeStep must be used within a ForgeStepProvider');
|
|
return context;
|
|
};
|