Path: blob/master/src/packages/frontend/compute/cloud/common/template.tsx
1503 views
import { useEffect, useRef, useState } from "react";1import { Checkbox, Spin } from "antd";2import type { ComputeServerTemplate } from "@cocalc/util/db-schema/compute-servers";3import { setTemplate } from "@cocalc/frontend/compute/api";4import { delay } from "awaiting";56export default function Template({7id,8template,9}: {10id: number;11template?: ComputeServerTemplate;12}) {13const [saving, setSaving] = useState<boolean>(false);14const changedRef = useRef<boolean>(false);15useEffect(() => {16changedRef.current = true;17setSaving(false);18}, [template]);19if (!id) {20// can't make it a template if it doesn't exist yet.21return null;22}23return (24<div>25<Checkbox26disabled={saving}27checked={!!template?.enabled}28onChange={async (e) => {29try {30setSaving(true);31changedRef.current = false;32await setTemplate({ id, template: { enabled: e.target.checked } });33} finally {34// just in case template doesn't change, we set this back manually35await delay(5000);36if (!changedRef.current) {37setSaving(false);38}39}40}}41>42Use as Template {saving ? <Spin /> : undefined}43</Checkbox>44</div>45);46}474849