Skip to content

Commit d771599

Browse files
committed
Refactor preset reordering logic to correctly include collapsed group children and ensure the component key uses preset.id
1 parent fd78352 commit d771599

1 file changed

Lines changed: 32 additions & 31 deletions

File tree

  • packages/ui/src/components/editor/panel/Presets

‎packages/ui/src/components/editor/panel/Presets/Presets.tsx‎

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -498,46 +498,47 @@ export const Presets: React.FC<Presets.Props> = (props) => {
498498
}
499499

500500
// Handle normal preset/group reordering
501-
if (props.on_presets_reorder) {
502-
const new_visible_presets = new_state
503-
.filter(
504-
(item) =>
505-
item.id !== UNGROUPED_ID &&
506-
item.id !== TRAILING_GROUP_ID &&
507-
item.id !== TRAILING_SEPARATOR_ID
508-
)
509-
.map(({ id, ...preset }) => preset) as Presets.Preset[]
501+
const new_visible_presets = new_state
502+
.filter(
503+
(item) =>
504+
item.id !== UNGROUPED_ID &&
505+
item.id !== TRAILING_GROUP_ID &&
506+
item.id !== TRAILING_SEPARATOR_ID
507+
)
508+
.map(({ id, ...preset }) => preset) as Presets.Preset[]
510509

511-
const reordered_presets: Presets.Preset[] = []
510+
const reordered_presets: Presets.Preset[] = []
512511

513-
for (const preset of new_visible_presets) {
514-
reordered_presets.push(preset)
512+
for (const preset of new_visible_presets) {
513+
reordered_presets.push(preset)
515514

516-
if (!preset.chatbot && preset.is_collapsed) {
517-
// It's a collapsed group. Find its children in original list and add them.
518-
const original_index = props.presets.findIndex(
519-
(p) => p.name === preset.name
520-
)
515+
if (!preset.chatbot && preset.is_collapsed) {
516+
// It's a collapsed group. Find its children in original list and add them.
517+
const original_index = props.presets.findIndex(
518+
(p) => p.name == preset.name
519+
)
521520

522-
if (original_index !== -1) {
523-
for (
524-
let i = original_index + 1;
525-
i < props.presets.length;
526-
i++
521+
if (original_index != -1) {
522+
for (
523+
let i = original_index + 1;
524+
i < props.presets.length;
525+
i++
526+
) {
527+
const child_candidate = props.presets[i]
528+
if (
529+
((child_candidate.chatbot && child_candidate.name) ||
530+
!child_candidate.name) &&
531+
props.presets[i - 1].name
527532
) {
528-
const child_candidate = props.presets[i]
529-
if (child_candidate.chatbot && child_candidate.name) {
530-
reordered_presets.push(child_candidate)
531-
} else {
532-
// next group or separator found
533-
break
534-
}
533+
reordered_presets.push(child_candidate)
534+
} else {
535+
break
535536
}
536537
}
537538
}
538539
}
539-
props.on_presets_reorder(reordered_presets)
540540
}
541+
props.on_presets_reorder(reordered_presets)
541542
}}
542543
animation={150}
543544
handle={`.${styles.presets__item__left__drag_handle}`}
@@ -788,7 +789,7 @@ export const Presets: React.FC<Presets.Props> = (props) => {
788789

789790
return (
790791
<div
791-
key={preset.name}
792+
key={preset.id}
792793
className={cn(styles.presets__item, {
793794
[styles['presets__item--highlighted']]:
794795
props.selected_preset_name == preset.name

0 commit comments

Comments
 (0)