Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/cocalc
Path: blob/master/src/packages/frontend/editors/slate/elements/checkbox/index.tsx
1698 views
1
/*
2
* This file is part of CoCalc: Copyright © 2020 Sagemath, Inc.
3
* License: MS-RSL – see LICENSE.md for details
4
*/
5
6
import { SlateElement, register, RenderElementProps } from "../register";
7
import { Checkbox as AntdCheckbox } from "antd";
8
9
export interface Checkbox extends SlateElement {
10
type: "checkbox";
11
value?: boolean; // important: using the field value results in more efficient diffs
12
}
13
14
interface Props extends RenderElementProps {
15
setElement?: (SlateElement) => void;
16
}
17
18
function StaticElement({ attributes, children, element, setElement }: Props) {
19
if (element.type != "checkbox") {
20
throw Error("bug");
21
}
22
return (
23
<span {...attributes}>
24
<AntdCheckbox
25
style={{
26
padding: "0 0.2em 0.2em 0.2em",
27
verticalAlign: "middle",
28
border: "1px solid transparent",
29
}}
30
checked={!!element.value}
31
disabled={setElement == null}
32
onChange={
33
setElement == null
34
? undefined
35
: () => {
36
setElement({ value: !element.value });
37
}
38
}
39
/>
40
{children}
41
</span>
42
);
43
}
44
45
register({
46
slateType: "checkbox",
47
markdownType: "checkbox_input",
48
toSlate: ({ token }) => {
49
return {
50
type: "checkbox",
51
isVoid: true,
52
isInline: true,
53
value: token.checked,
54
children: [{ text: "" }],
55
};
56
},
57
58
StaticElement,
59
});
60
61