Skip to content

Commit 2aa8090

Browse files
authored
[ENG-602] Add color setting (#300)
* add color setting * add default color
1 parent e15ca50 commit 2aa8090

4 files changed

Lines changed: 55 additions & 5 deletions

File tree

apps/obsidian/src/components/DiscourseContextView.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,13 @@ const DiscourseContext = ({ activeFile }: DiscourseContextProps) => {
4949
return (
5050
<>
5151
<div className="mb-6">
52-
<div className="text-md mb-2 font-bold">
52+
<div className="text-md mb-2 flex items-center gap-2 font-bold">
53+
{nodeType.color && (
54+
<div
55+
className="h-4 w-4 rounded-full"
56+
style={{ backgroundColor: nodeType.color }}
57+
/>
58+
)}
5359
{nodeType.name || "Unnamed Node Type"}
5460
</div>
5561

apps/obsidian/src/components/NodeTypeModal.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,14 @@ export class NodeTypeModal extends SuggestModal<DiscourseNode> {
2424
}
2525

2626
renderSuggestion(nodeType: DiscourseNode, el: HTMLElement) {
27-
el.createEl("div", { text: nodeType.name });
27+
const container = el.createDiv({ cls: "flex items-center gap-2" });
28+
if (nodeType.color) {
29+
container.createDiv({
30+
cls: "h-4 w-4 rounded-full",
31+
attr: { style: `background-color: ${nodeType.color};` },
32+
});
33+
}
34+
container.createDiv({ text: nodeType.name });
2835
}
2936

3037
async onChooseSuggestion(nodeType: DiscourseNode) {

apps/obsidian/src/components/NodeTypeSettings.tsx

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ import { DiscourseNode } from "~/types";
77
import { ConfirmationModal } from "./ConfirmationModal";
88
import { getTemplateFiles, getTemplatePluginInfo } from "~/utils/templates";
99

10-
type EditableFieldKey = keyof Omit<DiscourseNode, "id" | "shortcut" | "color">;
10+
type EditableFieldKey = keyof Omit<DiscourseNode, "id" | "shortcut">;
1111

1212
type BaseFieldConfig = {
1313
key: EditableFieldKey;
1414
label: string;
1515
description: string;
1616
required?: boolean;
17-
type: "text" | "select";
17+
type: "text" | "select" | "color";
1818
placeholder?: string;
1919
validate?: (
2020
value: string,
@@ -68,6 +68,13 @@ const FIELD_CONFIGS: Record<EditableFieldKey, BaseFieldConfig> = {
6868
type: "select",
6969
required: false,
7070
},
71+
color: {
72+
key: "color",
73+
label: "Color",
74+
description: "The color to use for this node type",
75+
type: "color",
76+
required: false,
77+
},
7178
};
7279

7380
const FIELD_CONFIG_ARRAY = Object.values(FIELD_CONFIGS);
@@ -92,6 +99,23 @@ const TextField = ({
9299
/>
93100
);
94101

102+
const ColorField = ({
103+
value,
104+
error,
105+
onChange,
106+
}: {
107+
value: string;
108+
error?: string;
109+
onChange: (value: string) => void;
110+
}) => (
111+
<input
112+
type="color"
113+
value={value || "#000000"}
114+
onChange={(e) => onChange(e.target.value)}
115+
className={`h-8 w-20 ${error ? "input-error" : ""}`}
116+
/>
117+
);
118+
95119
const TemplateField = ({
96120
value,
97121
error,
@@ -367,6 +391,8 @@ const NodeTypeSettings = () => {
367391
templateConfig={templateConfig}
368392
templateFiles={templateFiles}
369393
/>
394+
) : fieldConfig.type === "color" ? (
395+
<ColorField value={value} error={error} onChange={handleChange} />
370396
) : (
371397
<TextField
372398
fieldConfig={fieldConfig}
@@ -391,7 +417,15 @@ const NodeTypeSettings = () => {
391417
onClick={() => startEditing(index)}
392418
>
393419
<div className="flex items-center justify-between">
394-
<span className="font-medium">{nodeType.name}</span>
420+
<div className="flex items-center gap-2">
421+
{nodeType.color && (
422+
<div
423+
className="h-4 w-4 rounded-full"
424+
style={{ backgroundColor: nodeType.color }}
425+
/>
426+
)}
427+
<span>{nodeType.name}</span>
428+
</div>
395429
<div className="flex gap-2">
396430
<button
397431
className="icon-button"

apps/obsidian/src/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@ export const DEFAULT_NODE_TYPES: Record<string, DiscourseNode> = {
66
id: generateUid("node"),
77
name: "Question",
88
format: "QUE - {content}",
9+
color: "#99890e",
910
},
1011
Claim: {
1112
id: generateUid("node"),
1213
name: "Claim",
1314
format: "CLM - {content}",
15+
color: "#7DA13E",
1416
},
1517
Evidence: {
1618
id: generateUid("node"),
1719
name: "Evidence",
1820
format: "EVD - {content}",
21+
color: "#DB134A",
1922
},
2023
};
2124
export const DEFAULT_RELATION_TYPES: Record<string, DiscourseRelationType> = {

0 commit comments

Comments
 (0)