Skip to content

Commit cddc02c

Browse files
authored
version(minor): Merge pull request #89 from sathish151198/rfk-sync
feat(rfk): rename root bucket label
2 parents a3f5704 + db88e30 commit cddc02c

4 files changed

Lines changed: 333 additions & 5 deletions

File tree

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
import { useState } from 'react';
2+
import {
3+
FieldsKeeperProvider,
4+
FieldsKeeperBucket,
5+
FieldsKeeperRootBucket,
6+
IFieldsKeeperItem,
7+
IFieldsKeeperBucket,
8+
IRootBucketFieldItemLabelChangeProps,
9+
} from '..';
10+
11+
export default function Example38() {
12+
// compute
13+
const allItems: IFieldsKeeperItem[] = [
14+
{
15+
id: 'a',
16+
label: 'a',
17+
folders: ['folder_1'],
18+
},
19+
{
20+
id: 'b',
21+
label: 'b',
22+
folders: ['folder_1'],
23+
},
24+
{
25+
id: 'c',
26+
label: 'c',
27+
folders: ['folder_2'],
28+
},
29+
{
30+
id: 'd',
31+
label: 'd',
32+
folders: ['folder_2'],
33+
},
34+
{
35+
id: 'date.quarter',
36+
label: 'Quarter',
37+
folders: ['folder_2'],
38+
group: 'date',
39+
groupLabel: 'Date',
40+
groupOrder: 1,
41+
},
42+
{
43+
id: 'date.year',
44+
label: 'Year',
45+
folders: ['folder_2'],
46+
group: 'date',
47+
groupLabel: 'Date',
48+
groupOrder: 0,
49+
},
50+
{
51+
id: 'date.month',
52+
label: 'Month',
53+
folders: ['folder_2'],
54+
group: 'date',
55+
groupLabel: 'Date',
56+
groupOrder: 2,
57+
},
58+
{
59+
id: 'date.day',
60+
label: 'Day',
61+
folders: ['folder_2'],
62+
group: 'date',
63+
groupLabel: 'Date',
64+
groupOrder: 3,
65+
},
66+
];
67+
68+
const [buckets, setBuckets] = useState<IFieldsKeeperBucket[]>([
69+
{ id: 'bucket1', items: [allItems[0]] },
70+
{
71+
id: 'bucket2',
72+
items: [allItems[1], allItems[2]],
73+
},
74+
{ id: 'bucket3', items: [] },
75+
]);
76+
77+
78+
const [rootItems, setRootItems] = useState<IFieldsKeeperItem[]>(allItems);
79+
80+
const updateRootFieldLabel = (
81+
fieldItemLabelClickProps: IRootBucketFieldItemLabelChangeProps,
82+
) => {
83+
const {
84+
fieldItem,
85+
newValue,
86+
} = fieldItemLabelClickProps;
87+
88+
console.log(`Updating root field label: ${fieldItem.label} -> ${newValue}`);
89+
90+
// Update root items
91+
const updatedRootItems = rootItems.map((item) => {
92+
if (item.group === fieldItem.id) {
93+
return { ...item, groupLabel: newValue };
94+
}
95+
if (item.id === fieldItem.id) {
96+
return { ...item, label: newValue };
97+
}
98+
return item;
99+
});
100+
101+
setRootItems(updatedRootItems);
102+
103+
// Also update any items that might be in buckets to keep them in sync
104+
const updatedBuckets = buckets.map((bucket) => ({
105+
...bucket,
106+
items: bucket.items.map((item) => {
107+
if (item.group === fieldItem.id) {
108+
return { ...item, groupLabel: newValue };
109+
}
110+
if (item.id === fieldItem.id) {
111+
return { ...item, label: newValue };
112+
}
113+
return item;
114+
}),
115+
}));
116+
117+
setBuckets(updatedBuckets);
118+
};
119+
120+
// paint
121+
return (
122+
<div className="example-container">
123+
<div className="example-container-title">38. Edit Root Field Label</div>
124+
<FieldsKeeperProvider
125+
allItems={rootItems}
126+
buckets={buckets}
127+
onUpdate={(state) => {
128+
console.log(state);
129+
}}
130+
accentColor={'#117865'}
131+
foldersMeta={{
132+
folder_1: {
133+
id: 'folder_1',
134+
label: 'Folder 1',
135+
prefixNodeIcon: 'folder-icon',
136+
},
137+
folder_2: {
138+
id: 'folder_2',
139+
label: 'Folder 2',
140+
prefixNodeIcon: 'folder-icon',
141+
},
142+
}}
143+
>
144+
<div className="keeper-container">
145+
<div className="buckets-container">
146+
<FieldsKeeperBucket
147+
id="bucket1"
148+
label="Bucket 1"
149+
allowRemoveFields
150+
/>
151+
<FieldsKeeperBucket
152+
id="bucket2"
153+
label="Bucket 2"
154+
allowRemoveFields
155+
/>
156+
<FieldsKeeperBucket
157+
id="bucket3"
158+
label="Bucket 3"
159+
allowRemoveFields
160+
/>
161+
</div>
162+
<div className="root-bucket-container">
163+
<FieldsKeeperRootBucket
164+
label="Root Bucket"
165+
collapseFoldersOnMount={false}
166+
prefixNode={{ allow: true, reserveSpace: true }}
167+
onFieldItemLabelChange={(
168+
fieldItemLabelClickProps: IRootBucketFieldItemLabelChangeProps,
169+
) => {
170+
updateRootFieldLabel(fieldItemLabelClickProps);
171+
}}
172+
/>
173+
</div>
174+
</div>
175+
</FieldsKeeperProvider>
176+
</div>
177+
);
178+
}

src/Examples/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import Example34_Highlight_Between_Buckets from './Example34_Highlight_Between_B
3535
import Example35_Cross_Highlight_Across_Buckets from './Example35_Cross_Highlight_Across_Buckets';
3636
import Example36_bucketLabelSuffixRenderer from './Example36_bucketLabelSuffixRenderer';
3737
import Example37_bucket_move_suffix from './Example37_bucket_move_suffix';
38+
import Example38_root_bucket_label_editing from './Example38_root_bucket_label_editing';
3839

3940
export const examples = {
4041
Example1_sample_use_case,
@@ -73,5 +74,6 @@ export const examples = {
7374
Example34_Highlight_Between_Buckets,
7475
Example35_Cross_Highlight_Across_Buckets,
7576
Example36_bucketLabelSuffixRenderer,
76-
Example37_bucket_move_suffix
77+
Example37_bucket_move_suffix,
78+
Example38_root_bucket_label_editing
7779
};

src/FieldsKeeper/FieldsKeeper.types.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,11 @@ export interface IFieldsKeeperRootBucketProps {
385385
event: React.MouseEvent<HTMLDivElement, MouseEvent>,
386386
) => void;
387387

388+
/** Callback triggered when a field item label is changed */
389+
onFieldItemLabelChange?: (
390+
fieldItemClickProps: IRootBucketFieldItemLabelChangeProps,
391+
) => void;
392+
388393
/**
389394
* Callback fired when a field item is rigth clicked (context menu).
390395
*
@@ -661,6 +666,25 @@ export interface IFieldItemLabelChangeProps {
661666
fieldIndex?: number;
662667
}
663668

669+
/**
670+
* Properties for field item label change in root bucket (excludes bucketId)
671+
*/
672+
export interface IRootBucketFieldItemLabelChangeProps {
673+
/** The clicked field item object */
674+
fieldItem: IFieldsKeeperItem;
675+
676+
/** Previous value of the field item */
677+
oldValue: string;
678+
679+
/** Updated value of the field item */
680+
newValue: string;
681+
682+
/**
683+
* Index of the field item to which the label is updated.
684+
*/
685+
fieldIndex?: number;
686+
}
687+
664688
/**
665689
* Custom renderer properties for suffix items within a bucket.
666690
*/

0 commit comments

Comments
 (0)