react-native-gtk4
Advanced tools
Comparing version 1.20.3 to 1.20.4
@@ -40,10 +40,4 @@ "use strict"; | ||
const [boundItems, setBoundItems] = (0, react_1.useState)([]); | ||
const itemFactory = (0, react_1.useMemo)(() => (renderItem ? new node_gtk_4_0_1.default.SignalListItemFactory() : null), [renderItem]); | ||
const popoverItemFactory = (0, react_1.useMemo)(() => (renderPopoverItem ? new node_gtk_4_0_1.default.SignalListItemFactory() : null), [renderPopoverItem]); | ||
const PopoverItemComponent = (0, react_1.useCallback)((0, react_2.forwardRef)(function PopoverItemComponent({ value }, ref) { | ||
return renderPopoverItem ? renderPopoverItem(ref, value) : null; | ||
}), [renderPopoverItem]); | ||
const ItemComponent = (0, react_1.useCallback)((0, react_2.forwardRef)(function ItemComponent({ value }, ref) { | ||
return renderItem ? renderItem(ref, value) : null; | ||
}), [renderItem]); | ||
const itemFactory = (0, react_1.useMemo)(() => new node_gtk_4_0_1.default.SignalListItemFactory(), []); | ||
const popoverItemFactory = (0, react_1.useMemo)(() => new node_gtk_4_0_1.default.SignalListItemFactory(), []); | ||
const setupFactory = (0, react_1.useCallback)((factory, type) => { | ||
@@ -66,3 +60,2 @@ const onFactoryBind = (object) => { | ||
return () => { | ||
setBoundItems([]); | ||
factory.off("bind", onFactoryBind); | ||
@@ -85,17 +78,20 @@ factory.off("unbind", onFactoryUnbind); | ||
}; | ||
}, [ItemComponent, PopoverItemComponent]); | ||
}, [renderItem, renderPopoverItem]); | ||
(0, react_1.useImperativeHandle)(ref, () => innerRef.current); | ||
return (react_1.default.createElement(react_1.default.Fragment, null, | ||
(0, portal_js_1.createPortal)(boundItems.map(({ type, value }) => { | ||
const Component = type === "item" ? ItemComponent : PopoverItemComponent; | ||
const renderFn = type === "item" ? renderItem : renderPopoverItem; | ||
if (!renderFn) { | ||
return null; | ||
} | ||
const listItem = value; | ||
const item = listItem.item; | ||
const id = item.getProperty("string"); | ||
return (react_1.default.createElement(Component, { key: `${id}-${type}`, ref: (node) => { | ||
if (node) { | ||
listItem.setChild(node); | ||
} | ||
}, value: items[id].value })); | ||
return (react_1.default.createElement(react_1.default.Fragment, { key: `${type}-${id}` }, renderFn((node) => { | ||
if (node) { | ||
listItem.setChild(node); | ||
} | ||
}, items[id].value))); | ||
})), | ||
react_1.default.createElement(intrinsics_js_1.DropDown, { model: model, ref: innerRef, factory: itemFactory ?? undefined, listFactory: popoverItemFactory ?? undefined, ...props }), | ||
react_1.default.createElement(intrinsics_js_1.DropDown, { model: model, ref: innerRef, factory: renderItem ? itemFactory : undefined, listFactory: renderPopoverItem ? popoverItemFactory : undefined, ...props }), | ||
react_1.default.createElement(Context.Provider, { value: { | ||
@@ -115,7 +111,9 @@ items, | ||
value, | ||
index: model.getNItems() - 1, | ||
index: model.getNItems(), | ||
}; | ||
model.append(id); | ||
return () => { | ||
model.remove(items[id].index); | ||
if (model.getString(items[id].index) === id) { | ||
model.remove(items[id].index); | ||
} | ||
delete items[id]; | ||
@@ -122,0 +120,0 @@ }; |
{ | ||
"name": "react-native-gtk4", | ||
"version": "1.20.3", | ||
"version": "1.20.4", | ||
"description": "React renderer for GTK4 using node-gtk", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
691183
15331