Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions demo/src/Components/BottomSheet/ContentSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,16 @@ const BottomSheetContentSection = (props: HvComponentProps) => {
[key, setContentSectionHeight],
);

const children = Hyperview.renderChildren(
props.element,
props.stylesheets,
props.onUpdate,
props.options,
return (
<View onLayout={onLayout}>
<Hyperview.HvChildren
element={props.element}
onUpdate={props.onUpdate}
options={props.options}
stylesheets={props.stylesheets}
/>
</View>
);
return <View onLayout={onLayout}>{children}</View>;
};

BottomSheetContentSection.namespaceURI = namespace;
Expand Down
15 changes: 9 additions & 6 deletions demo/src/Components/BottomSheet/StopPoint.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ import { View } from 'react-native';
import { namespace } from './types';

const BottomSheetStopPoint = (props: HvComponentProps) => {
const children = Hyperview.renderChildren(
props.element,
props.stylesheets,
props.onUpdate,
props.options,
return (
<View>
<Hyperview.HvChildren
element={props.element}
onUpdate={props.onUpdate}
options={props.options}
stylesheets={props.stylesheets}
/>
</View>
);
return <View>{children}</View>;
};

BottomSheetStopPoint.namespaceURI = namespace;
Expand Down
33 changes: 20 additions & 13 deletions demo/src/Components/BottomTabBar/BottomTabBarItem.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as Render from 'hyperview/src/services/render';
import type { HvComponentOnUpdate, HvComponentProps } from 'hyperview';
import React, { useState } from 'react';
import { TouchableWithoutFeedback, View } from 'react-native';
import { createElement, useState } from 'react';
import type { HvComponentProps } from 'hyperview';
import Hyperview from 'hyperview';
import { createEventHandler } from 'hyperview/src/core/hyper-ref';
import { createProps } from 'hyperview/src/services';
import { namespaceURI } from './constants';
Expand Down Expand Up @@ -36,17 +36,24 @@ const BottomTabBarItem = (props: HvComponentProps) => {
// component to ensure proper layout.
outerProps.style = { flex: p.style.flex };
}
const component = createElement(
View,
p,
...Render.renderChildren(
props.element,
props.stylesheets,
props.onUpdate as HvComponentOnUpdate,
newOptions,
),
return (
<TouchableWithoutFeedback
// eslint-disable-next-line react/jsx-props-no-spreading
{...outerProps}
>
<View
// eslint-disable-next-line react/jsx-props-no-spreading
{...p}
>
<Hyperview.HvChildren
element={props.element}
onUpdate={props.onUpdate}
options={newOptions}
stylesheets={props.stylesheets}
/>
</View>
</TouchableWithoutFeedback>
);
return createElement(TouchableWithoutFeedback, outerProps, component);
};

BottomTabBarItem.namespaceURI = namespaceURI;
Expand Down
16 changes: 9 additions & 7 deletions demo/src/Components/Filter/Filter.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import * as Logging from 'hyperview/src/services/logging';
import Hyperview, { Events, LOCAL_NAME, Namespaces } from 'hyperview';
import React, { useEffect } from 'react';
import type { HvComponentProps } from 'hyperview';
import { findElements } from '../../Helpers';
import { useEffect } from 'react';

type FormDataPart = {
fieldName: string;
Expand Down Expand Up @@ -101,12 +101,14 @@ const Filter = (props: HvComponentProps) => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.element]);

return (Hyperview.renderChildren(
props.element,
props.stylesheets,
props.onUpdate,
props.options,
) as unknown) as JSX.Element;
return (
<Hyperview.HvChildren
element={props.element}
onUpdate={props.onUpdate}
options={props.options}
stylesheets={props.stylesheets}
/>
);
};

Filter.namespaceURI = FILTER_NS;
Expand Down
14 changes: 6 additions & 8 deletions demo/src/Components/Map/Map.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,6 @@ const Map = (props: HvComponentProps) => {
});
};

const children = Hyperview.renderChildren(
props.element,
props.stylesheets,
props.onUpdate,
props.options,
);

return (
<MapView
ref={ref}
Expand All @@ -110,7 +103,12 @@ const Map = (props: HvComponentProps) => {
toolbarEnabled={false}
zoomEnabled={false}
>
{children}
<Hyperview.HvChildren
element={props.element}
onUpdate={props.onUpdate}
options={props.options}
stylesheets={props.stylesheets}
/>
</MapView>
);
};
Expand Down
13 changes: 8 additions & 5 deletions demo/src/Components/Map/MapMarker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@ const MapMarker = (props: HvComponentProps) => {
latitude: parseFloat(getAttribute('latitude') || '0'),
longitude: parseFloat(getAttribute('longitude') || '0'),
};
const children = Hyperview.renderChildren(
props.element,
props.stylesheets,
props.onUpdate,
props.options,

const children = (
<Hyperview.HvChildren
element={props.element}
onUpdate={props.onUpdate}
options={props.options}
stylesheets={props.stylesheets}
/>
);
if (Platform.OS === 'web') {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
Expand Down
16 changes: 9 additions & 7 deletions demo/src/Components/NavBack/NavBack.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import React, { useContext } from 'react';
import type { HvComponentProps } from 'hyperview';
import Hyperview from 'hyperview';
import { NavigationContext } from '@react-navigation/native';
import { findElements } from '../../Helpers';
import { useContext } from 'react';

export const namespaceURI = 'https://hyperview.org/navigation';

Expand All @@ -25,12 +25,14 @@ const NavBack = (props: HvComponentProps) => {
if (!element) {
return null;
}
return (Hyperview.renderElement(
element,
props.stylesheets,
props.onUpdate,
props.options,
) as unknown) as JSX.Element;
return (
<Hyperview.HvElement
element={element}
onUpdate={props.onUpdate}
options={props.options}
stylesheets={props.stylesheets}
/>
);
};

NavBack.namespaceURI = namespaceURI;
Expand Down
13 changes: 6 additions & 7 deletions demo/src/Components/SafeAreaView/SafeAreaView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,6 @@ const SafeAreaView = (props: HvComponentProps) => {
props.element.getAttributeNS(namespaceURI, 'mode') || defaultMode;
const insets =
props.element.getAttributeNS(namespaceURI, 'insets') || defaultInsets;
const children = Hyperview.renderChildren(
props.element,
props.stylesheets,
props.onUpdate,
props.options,
);
const extraStyle = Hyperview.createStyleProp(
props.element,
props.stylesheets,
Expand Down Expand Up @@ -91,7 +85,12 @@ const SafeAreaView = (props: HvComponentProps) => {
return (
// eslint-disable-next-line react/jsx-props-no-spreading
<View key={key} style={style}>
{children}
<Hyperview.HvChildren
element={props.element}
onUpdate={props.onUpdate}
options={props.options}
stylesheets={props.stylesheets}
/>
</View>
);
};
Expand Down
17 changes: 10 additions & 7 deletions demo/src/Components/ScrollOpacity/ScrollOpacity.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,16 @@ const ScrollOpacity = (props: HvComponentProps) => {
}).start();
}, [duration, opacity, opacityRange, position, scrollRange]);

const children = (Hyperview.renderChildren(
props.element,
props.stylesheets,
props.onUpdate,
props.options,
) as unknown) as JSX.Element;
return <Animated.View style={[style, { opacity }]}>{children}</Animated.View>;
return (
<Animated.View style={[style, { opacity }]}>
<Hyperview.HvChildren
element={props.element}
onUpdate={props.onUpdate}
options={props.options}
stylesheets={props.stylesheets}
/>
</Animated.View>
);
};

ScrollOpacity.namespaceURI = namespaceURI;
Expand Down
34 changes: 18 additions & 16 deletions demo/src/Core/BottomTabBar/index.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import * as Render from 'hyperview/src/services/render';
import React, { useCallback } from 'react';
import type { HvComponentOnUpdate } from 'hyperview';
import Hyperview from 'hyperview';
import type { Props } from './types';
import { useBottomTabBarContext } from '../../Contexts';
import { useCallback } from 'react';

/**
* Component used by Hyperview to render a custom bottom tab bar.
Expand Down Expand Up @@ -40,18 +40,20 @@ export const BottomTabBar = (navProps: Props): JSX.Element | null => {
return null;
}

return (Render.renderChildren(
props.element,
props.stylesheets,
onUpdateCustom,
{
...props.options,
onSelect: (route: string | null | undefined) => {
if (route) {
navigation.navigate(route);
}
},
targetId: state.routes[state.index].name,
},
) as unknown) as JSX.Element;
return (
<Hyperview.HvChildren
element={props.element}
onUpdate={onUpdateCustom}
options={{
...props.options,
onSelect: (route: string | null | undefined) => {
if (route) {
navigation.navigate(route);
}
},
targetId: state.routes[state.index].name,
}}
stylesheets={props.stylesheets}
/>
);
};
15 changes: 8 additions & 7 deletions src/components/hv-list/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import * as Dom from 'hyperview/src/services/dom';
import * as Keyboard from 'hyperview/src/services/keyboard';
import * as Logging from 'hyperview/src/services/logging';
import * as Namespaces from 'hyperview/src/services/namespaces';
import * as Render from 'hyperview/src/services/render';
import type {
DOMString,
HvComponentOnUpdate,
Expand All @@ -20,6 +19,7 @@ import { createTestProps, getAncestorByTagName } from 'hyperview/src/services';
import { DOMParser } from '@instawork/xmldom';
import type { ElementRef } from 'react';
import { FlatList } from 'hyperview/src/core/components/scroll';
import HvElement from 'hyperview/src/core/components/hv-element';
import { LOCAL_NAME } from 'hyperview/src/types';

export default class HvList extends PureComponent<HvComponentProps, State> {
Expand Down Expand Up @@ -265,12 +265,13 @@ export default class HvList extends PureComponent<HvComponentProps, State> {
removeClippedSubviews={false}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
renderItem={({ item }: any) =>
item &&
Render.renderElement(
item,
this.props.stylesheets,
this.onUpdate,
this.props.options,
item && (
<HvElement
element={item as Element}
onUpdate={this.onUpdate}
options={this.props.options}
stylesheets={this.props.stylesheets}
/>
)
}
scrollIndicatorInsets={scrollIndicatorInsets}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import * as Behaviors from 'hyperview/src/services/behaviors';
import * as Namespaces from 'hyperview/src/services/namespaces';
import * as Render from 'hyperview/src/services/render';
import type {
HvComponentOnUpdate,
HvComponentProps,
} from 'hyperview/src/types';
import React, { PureComponent } from 'react';
import { TouchableWithoutFeedback, View } from 'react-native';
import HvChildren from 'hyperview/src/core/components/hv-children';
import type { HvComponentProps } from 'hyperview/src/types';
import { LOCAL_NAME } from 'hyperview/src/types';
import type { State } from './types';
import { createEventHandler } from 'hyperview/src/core/hyper-ref';
Expand Down Expand Up @@ -56,6 +53,7 @@ export default class HvOption extends PureComponent<HvComponentProps, State> {
this.props.stylesheets,
newOptions,
);
const { key, ...otherProps } = props;

// Option renders as an outer TouchableWithoutFeedback view and inner view.
// The outer view handles presses, the inner view handles styling.
Expand All @@ -82,19 +80,24 @@ export default class HvOption extends PureComponent<HvComponentProps, State> {
outerProps.style = { flex: props.style.flex };
}

return React.createElement(
TouchableWithoutFeedback,
outerProps,
React.createElement(
View,
props,
...Render.renderChildren(
this.props.element,
this.props.stylesheets,
this.props.onUpdate as HvComponentOnUpdate,
newOptions,
),
),
return (
<TouchableWithoutFeedback
// eslint-disable-next-line react/jsx-props-no-spreading
{...outerProps}
>
<View
key={key}
// eslint-disable-next-line react/jsx-props-no-spreading
{...otherProps}
>
<HvChildren
element={this.props.element}
onUpdate={this.props.onUpdate}
options={newOptions}
stylesheets={this.props.stylesheets}
/>
</View>
</TouchableWithoutFeedback>
);
}
}
Loading