import Roact from "@rbxts/roact"
import { ContextActionService, HttpService } from "@rbxts/services"
import { Spring } from "@rbxts/flipper"
import { useEffect } from "@rbxts/roact-hooked"
import Item from "./item"
import Surface from "ReplicatedStorage/ui/components/surface"
import { useMotor } from "@rbxts/pretty-roact-hooks"
interface ConfigProps extends Roact.JsxInstanceProperties {
shown: boolean
Event?: Roact.JsxInstanceEvents
Change?: Roact.JsxInstanceChangeEvents
}
const CONFIG_DEFAULT = new Spring(1.5, { frequency: 6 })
const CONFIG_ACTIVE = new Spring(.5, { frequency: 6 })
function config(props: ConfigProps): Roact.Element {
let { shown } = props
const spreadableProps = { ...props } as Partial
delete spreadableProps.shown
const [configPosY, setConfigGoal] = useMotor(1.5)
// TODO: maybe opt this into our system for inputs?
useEffect(() => {
const guid = HttpService.GenerateGUID(false)
ContextActionService.BindAction(
guid,
(_, userInputState) => {
if (Enum.UserInputState.Begin === userInputState) {
shown = !shown
if (shown) {
setConfigGoal(CONFIG_ACTIVE)
} else {
setConfigGoal(CONFIG_DEFAULT)
}
}
},
false,
Enum.KeyCode.P
)
})
return (
{
return new UDim2(.5, 0, posY, 0)
})
}
size={new UDim2(.4, 0, .7, 0)}
Key={"config"}
>
)
}
export default config