Skip to content

Commit 79cffeb

Browse files
committed
feat: finalised use of id on verb. Style elements on edit mode
1 parent 4fb76a7 commit 79cffeb

File tree

17 files changed

+185
-611
lines changed

17 files changed

+185
-611
lines changed

data/verbs.json

Lines changed: 74 additions & 0 deletions
Large diffs are not rendered by default.

src/components/statementWizard/SentimentVerbPicker.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import VerbGrid from './VerbGrid';
99
import { getAllDescendants } from '../../../utils/categoryUtils';
1010

1111
interface SentimentVerbPickerProps {
12-
selectedVerb: string;
12+
selectedVerbId: string;
1313
onVerbSelect: (verb: Verb) => void;
1414
}
1515

1616
const SentimentVerbPicker: React.FC<SentimentVerbPickerProps> = ({
17-
selectedVerb,
17+
selectedVerbId,
1818
onVerbSelect,
1919
}) => {
2020
// Use a navigation stack (path) to track filter levels.
@@ -63,7 +63,7 @@ const SentimentVerbPicker: React.FC<SentimentVerbPickerProps> = ({
6363
<VerbGrid
6464
verbs={filteredVerbs}
6565
rootCategory={rootCategory}
66-
selectedVerb={selectedVerb}
66+
selectedVerbId={selectedVerbId}
6767
onVerbSelect={onVerbSelect}
6868
/>
6969
</div>

src/components/statementWizard/StatementPreview.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import React from 'react';
22
import type { Entry } from '../../../types/entries';
3+
import { getVerbName } from '../../../utils/verbUtils';
4+
35
interface StatementPreviewProps {
46
selection: Entry;
57
}
@@ -18,7 +20,7 @@ const StatementPreview: React.FC<StatementPreviewProps> = ({ selection }) => {
1820
)}
1921
{verb && (
2022
<span className={`px-2 py-1 rounded bg-verbSelector text-black`}>
21-
{verb}
23+
{getVerbName(verb)}
2224
</span>
2325
)}
2426
{object && (

src/components/statementWizard/SubjectTiles.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,17 @@ export const SubjectTiles: React.FC<SubjectTilesProps> = ({
5656
<Button
5757
key={tile.value}
5858
variant={selectedValue === tile.value ? 'default' : 'outline'}
59-
className={`h-auto py-4 px-6 text-left flex flex-col items-start space-y-1 transition-all ${
60-
selectedValue === tile.value ? 'bg-blue-200' : ''
61-
}`}
59+
selected={selectedValue === tile.value}
60+
className={`h-auto py-4 px-6 text-left flex flex-col items-start space-y-1
61+
62+
`}
6263
onClick={() => onSelect(tile.value)}
64+
style={
65+
{
66+
// Set the CSS variable to the subject selector color. This is used on buttonVariants.ts
67+
'--tile-color': 'var(--subject-selector)',
68+
} as React.CSSProperties
69+
}
6370
>
6471
<span className='font-medium'>{tile.label}</span>
6572
</Button>

src/components/statementWizard/VerbGrid.tsx

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,37 @@ import { getVerbColor } from '../../../utils/categoryUtils';
99
interface VerbGridProps {
1010
verbs: Verb[];
1111
rootCategory: Category;
12-
selectedVerb: string;
12+
selectedVerbId: string;
1313
onVerbSelect: (verb: Verb) => void;
1414
}
1515

1616
const VerbGrid: React.FC<VerbGridProps> = ({
1717
verbs,
1818
rootCategory,
19-
selectedVerb,
19+
selectedVerbId,
2020
onVerbSelect,
2121
}) => {
2222
const sortedVerbs = [...verbs].sort((a, b) => a.name.localeCompare(b.name));
2323
return (
2424
<div className='grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 gap-4 p-4 overflow-auto'>
2525
{sortedVerbs.map((verb) => {
2626
const tileColor = getVerbColor(verb, rootCategory);
27-
const isSelected = verb.name === selectedVerb;
27+
console.log('Verb name:', verb.name, ' SelectedVerb:', selectedVerbId);
28+
const isSelected = verb.id === selectedVerbId;
2829
return (
2930
<Button
3031
key={verb.name}
3132
onClick={() => onVerbSelect(verb)}
32-
variant={isSelected ? 'default' : 'outline'}
33+
variant={'outline'}
34+
selected={isSelected}
3335
className='flex items-center justify-center p-4 rounded-lg shadow-md'
34-
style={{
35-
backgroundColor: isSelected ? tileColor : 'transparent',
36-
color: isSelected ? getContrastColor(tileColor) : 'inherit',
37-
borderColor: tileColor,
38-
}}
36+
style={
37+
{
38+
'--tile-color': tileColor,
39+
color: isSelected ? getContrastColor(tileColor) : 'inherit',
40+
borderColor: tileColor,
41+
} as React.CSSProperties
42+
}
3943
>
4044
<span className='font-medium'>{verb.name}</span>
4145
</Button>

src/components/statementWizard/PrivacySelector.tsx renamed to src/components/statementWizard/selectors/PrivacySelector.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react';
2-
import { Button } from '../ui/button';
2+
import { Button } from '../../ui/button';
33
import { Mail } from 'lucide-react';
44

55
interface PrivacySelectorProps {

src/components/ui/subject-selector.tsx renamed to src/components/statementWizard/selectors/SubjectSelector.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
// src/components/ui/subject-selector.tsx
21
import React, { useState, useMemo } from 'react';
32
import { Check, ChevronsUpDown, Plus } from 'lucide-react';
4-
import { cn } from '../../../lib/utils';
5-
import { Button } from './button';
6-
import { Popover, PopoverContent, PopoverTrigger } from './popover';
7-
import { Input } from './input';
8-
import descriptorsData from '../../../data/descriptors.json';
3+
import { cn } from '../../../../lib/utils';
4+
import { Button } from '../../ui/button';
5+
import { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';
6+
import { Input } from '../../ui/input';
7+
import descriptorsData from '../../../../data/descriptors.json';
98

109
interface SubjectOption {
1110
label: string;
@@ -90,7 +89,7 @@ const SubjectSelector: React.FC<SubjectSelectorProps> = ({
9089
}}
9190
className={cn(
9291
'flex w-full items-center px-2 py-2 hover:bg-gray-100 rounded',
93-
{ 'bg-blue-200': option.value === value } // Selected background
92+
{ 'bg-red-200': option.value === value } // Selected background
9493
)}
9594
>
9695
<Check

src/components/ui/VerbSelector.tsx renamed to src/components/statementWizard/selectors/VerbSelector.tsx

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import type React from 'react';
44
import { useState, useEffect } from 'react';
55
import { motion } from 'framer-motion';
66
import { ChevronLeft, ChevronRight } from 'lucide-react';
7-
import categoryStructure from '../../../data/categoryStructure.json';
8-
import verbData from '../../../data/verbs.json';
9-
import type { Category, Verb } from '../../../types/entries';
7+
import categoryStructure from '../../../../data/categoryStructure.json';
8+
import verbData from '../../../../data/verbs.json';
9+
import type { Category, Verb } from '../../../../types/entries';
1010

1111
interface VerbSelectorProps {
1212
onVerbSelect?: (verb: Verb) => void;
@@ -123,21 +123,25 @@ const VerbSelector: React.FC<VerbSelectorProps> = ({ onVerbSelect }) => {
123123
);
124124

125125
return renderGrid(
126-
verbs.map((verb) => (
127-
<motion.button
128-
key={verb.name}
129-
whileHover={{ scale: 1.05 }}
130-
whileTap={{ scale: 0.95 }}
131-
className='p-4 rounded-lg shadow-md flex items-center justify-center text-center'
132-
style={{
133-
background: verb.color,
134-
color: getContrastColor(verb.color),
135-
}}
136-
onClick={() => handleVerbSelect(verb)}
137-
>
138-
<span className='break-words'>{verb.name}</span>
139-
</motion.button>
140-
))
126+
verbs.map((verb) => {
127+
// Use this to highlight the selected verb
128+
//const isSelected = selectedVerb ? verb.id === selectedVerb.id : false;
129+
return (
130+
<motion.button
131+
key={verb.id} // use verb.id as key
132+
whileHover={{ scale: 1.05 }}
133+
whileTap={{ scale: 0.95 }}
134+
className='p-4 rounded-lg shadow-md flex items-center justify-center text-center'
135+
style={{
136+
background: verb.color,
137+
color: getContrastColor(verb.color),
138+
}}
139+
onClick={() => handleVerbSelect(verb)}
140+
>
141+
<span className='break-words'>{verb.name}</span>
142+
</motion.button>
143+
);
144+
})
141145
);
142146
};
143147

src/components/statementWizard/steps/PrivacyStep.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import StepContainer from '../StepContainer';
3-
import { PrivacySelector } from '../PrivacySelector';
3+
import { PrivacySelector } from '../selectors/PrivacySelector';
44

55
interface PrivacyStepProps {
66
isPublic: boolean;

src/components/statementWizard/steps/VerbStep.tsx

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
// src/components/statementWizard/steps/VerbStep.tsx
21
import React from 'react';
32
import StepContainer from '../StepContainer';
43
import SentimentVerbPicker from '../SentimentVerbPicker';
5-
import nlp from 'compromise';
4+
import type { Verb } from '../../../../types/entries';
65

76
interface VerbStepProps {
87
subject: string;
@@ -21,15 +20,9 @@ export const VerbStep: React.FC<VerbStepProps> = ({
2120
<StepContainer subQuestion={subQuestion}>
2221
<div className='flex flex-col h-[60vh] p-4 rounded-md'>
2322
<SentimentVerbPicker
24-
selectedVerb={selection}
25-
onVerbSelect={(verb) => {
26-
// Process verb to present tense and lowercase it
27-
const processedVerb = nlp(verb.name)
28-
.verbs()
29-
.toPresentTense()
30-
.out('text')
31-
.toLowerCase();
32-
onUpdate(processedVerb);
23+
selectedVerbId={selection}
24+
onVerbSelect={(verb: Verb) => {
25+
onUpdate(verb.id);
3326
}}
3427
/>
3528
</div>

0 commit comments

Comments
 (0)