wix-style-react
Version:
189 lines (165 loc) • 4.47 kB
JavaScript
export const simple = `
<DropdownLayout
options={[
{ id: 1, value: 'Option 1'},
{ id: 2, value: 'Option 2'},
{ id: 3, value: 'Option 3'},
{ id: 4, value: 'Option 4 is disabled', disabled: true },
]}
visible
inContainer
/>
`;
export const maxHeight = `
<DropdownLayout
options={[
{ id: 1, value: 'Option 1'},
{ id: 2, value: 'Option 2'},
{ id: 3, value: 'Option 3'},
{ id: 4, value: 'Option 4'},
{ id: 5, value: 'Option 5'},
{ id: 6, value: 'Option 6'},
{ id: 7, value: 'Option 7'},
{ id: 8, value: 'Option 8'},
{ id: 9, value: 'Option 9'},
{ id: 10, value: 'Option 10'}
]}
visible
inContainer
maxHeightPixels="170px"
/>;
`;
export const headerFooter = `
<DropdownLayout
options={[
{ id: 1, value: 'Option 1' },
{ id: 2, value: 'Option 2' },
{ id: 3, value: 'Option 3' },
{ id: 4, value: 'Option 4' },
{ id: 5, value: 'Option 5' },
{ id: 6, value: 'Option 6' },
{ id: 7, value: 'Option 7' },
{ id: 8, value: 'Option 8' },
{ id: 9, value: 'Option 9' },
{ id: 10, value: 'Option 10' },
]}
fixedHeader={<ListItemAction title="Fixed Header" />}
fixedFooter={<ListItemAction title="Fixed Footer" />}
maxHeightPixels="234px"
visible
inContainer
/>
`;
export const infiniteScroll = `
class InfiniteScrollExample extends React.Component {
total = 300;
itemsPerPage = 15;
state= { hasMore: true, options: [] };
componentDidMount() {
this.generateData();
}
generateOption = id => ({ id, value: 'Option ' + id });
generateData = () => {
const newOptions = [];
const { options } = this.state;
for (let i = 0; i < this.itemsPerPage; i++) {
newOptions.push(this.generateOption(options.length + i));
}
this.setState({ options: options.concat(newOptions) });
};
loadMoreData = () => {
const { options } = this.state;
if (options.length >= this.total) {
this.setState({ hasMore: false });
} else {
this.generateData();
}
};
loadMore = () => setTimeout(this.loadMoreData, 1000);
render() {
const { options, hasMore } = this.state;
return (<DropdownLayout
infiniteScroll
visible
inContainer
hasMore={hasMore}
loadMore={this.loadMore}
options={options}
/>
);
}
}
`;
export const groups = `
<DropdownLayout
options={[
listItemSectionBuilder({
id: 0,
type: 'subheader',
title: 'Group 1',
}),
{ id: 1, value: 'Option 1' },
{ id: 2, value: 'Option 2' },
listItemSectionBuilder({
id: 3,
type: 'divider',
}),
{ id: 4, value: 'Option 3' },
]}
visible
inContainer
/>
`;
export const functionOptions = `() => {
const setBoxBackground = ({selected, hovered }) =>
(selected && hovered && 'R20') || (selected && 'R10') ||(hovered && 'R50') || 'D80';
const customBuilderFunction = ({
id,
title,
disabled,
}) => ({
id,
disabled,
overrideOptionStyle: true,
value: ({selected, hovered, disabled, ...rest }) => (
<Box backgroundColor={setBoxBackground({selected, hovered})} padding="6px 24px">
<Text
weight="bold"
children={title}
skin={disabled? 'disabled' : 'standard'}
light={selected}
{...rest}
/>
</Box>
),
});
const options = [
customBuilderFunction({ id: 1, title: 'Custom Option 1'}),
customBuilderFunction({ id: 2, title: 'Custom Option 2', disabled: true}),
listItemActionBuilder({
id: 3,
prefixIcon: <Icons.Edit />,
title: 'Builder Option 3',
}),,
{ id: 4, value: 'Option 4'}
];
return (<DropdownLayout inContainer visible options={options} />);
};
`;
export const controlled = `() => {
const [ selectedId , setSelectedId] = React.useState(1);
const options = [
{ id: 1, value: 'Option 1'},
{ id: 2, value: 'Option 2'},
{ id: 3, value: 'Option 3'},
{ id: 4, value: 'Option 4'},
];
return <DropdownLayout
inContainer
visible
options={options}
selectedId={selectedId}
onSelect={({id}) => setSelectedId(id)}
/>
}
`;