import React from "react";
import { useGame, usePlayer } from "../hooks";
import { Json } from "../json";
import { EScope } from "../store";
export type StepsFunc = (treatment: Json) => React.ElementType[] | undefined;
export interface StepsProps {
steps: React.ElementType[] | StepsFunc;
progressKey: string;
doneKey: string;
object?: EScope;
}
{
/*
*/
}
export const Steps: React.FC = ({
steps,
progressKey,
doneKey,
object,
children,
}) => {
let obj: EScope;
const player = usePlayer();
const game = useGame();
if (object) {
obj = object;
} else {
if (!player) {
return <>>;
}
obj = player;
}
if (obj.get(doneKey)) {
return <>{children}>;
}
let actualSteps: React.ElementType[];
if (typeof steps === "function") {
if (!game) {
console.warn("steps: cannot use steps function if game not assigned");
return <>>;
}
const res = steps(game?.treatment || {});
if (!res) {
obj.set(doneKey, true);
return <>{children}>;
}
actualSteps = res;
} else {
actualSteps = steps;
}
const index = (obj.get(progressKey) as number) || 0;
if (actualSteps.length === 0 || index >= actualSteps.length) {
obj.set(doneKey, true);
return <>{children}>;
}
const Step = actualSteps[index];
const next = () => {
if (index + 1 >= actualSteps.length) {
obj.set(doneKey, true);
} else {
obj.set(progressKey, index + 1);
}
};
return ;
};