|
| 1 | +```jsx |
| 2 | +const { Well } = require('@zendeskgarden/react-notifications/src'); |
| 3 | +const { Checkbox, Field, Input, Label } = require('@zendeskgarden/react-forms/src'); |
| 4 | +const { |
| 5 | + Dropdown, |
| 6 | + Select, |
| 7 | + Field: SelectField, |
| 8 | + Label: SelectLabel, |
| 9 | + Menu, |
| 10 | + Item: MenuItem |
| 11 | +} = require('@zendeskgarden/react-dropdowns/src'); |
| 12 | +const { Range, RangeField, Label: RangeLabel } = require('@zendeskgarden/react-ranges/src'); |
| 13 | + |
| 14 | +initialState = { |
| 15 | + length: 1, |
| 16 | + levels: 1, |
| 17 | + ordered: false, |
| 18 | + size: UnorderedList.defaultProps.size, |
| 19 | + start: 1 |
| 20 | +}; |
| 21 | + |
| 22 | +const text = [ |
| 23 | + 'garden es bonus vobis proinde vos postulo essum magis kohlrabi welsh onion daikon amaranth tatsoi tomatillo melon azuki bean garlic beet greens corn soko endive gumbo gourd shallot courgette tatsoi pea sprouts fava bean collard greens dandelion okra wakame tomato cucumber earthnut pea peanut soko zucchini.'.split( |
| 24 | + ' ' |
| 25 | + ), |
| 26 | + 'greens yarrow ricebean rutabaga endive cauliflower sea lettuce kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus winter purslane kale celery potato scallion desert raisin horseradish spinach carrot soko lotus root water spinach fennel kombu maize bamboo shoot green bean swiss chard seakale pumpkin sprout coriander.'.split( |
| 27 | + ' ' |
| 28 | + ), |
| 29 | + 'water chestnut gourd swiss chard wakame kohlrabi beetroot carrot watercress corn amaranth salsify bunya nuts nori azuki bean chickweed potato bell pepper artichoke chestnut eggplant winter purslane fennel azuki bean earthnut pea sierra leone bologi leek soko chicory celtuce parsley jícama salsify celery quandong swiss chard.'.split( |
| 30 | + ' ' |
| 31 | + ), |
| 32 | + 'rock melon radish asparagus spinach beetroot water spinach okra water chestnut ricebean pea catsear courgette summer purslane water spinach arugula pea tatsoi aubergine spring onion bush tomato kale radicchio turnip chicory salsify pea sprouts fava bean dandelion zucchini burdock yarrow chickpea dandelion sorrel courgette turnip greens.'.split( |
| 33 | + ' ' |
| 34 | + ) |
| 35 | +]; |
| 36 | +const getType = (ordered, level) => { |
| 37 | + const types = ordered ? ['decimal', 'lower-alpha', 'lower-roman'] : ['disc', 'circle', 'square']; |
| 38 | + const index = level % types.length; |
| 39 | + |
| 40 | + return types[index]; |
| 41 | +}; |
| 42 | + |
| 43 | +const NestedList = ({ level = 0, ...props }) => { |
| 44 | + const content = text.map(string => string.slice(0, state.length).join(' ')); |
| 45 | + const List = state.ordered ? OrderedList : UnorderedList; |
| 46 | + |
| 47 | + if (level < state.levels) { |
| 48 | + return ( |
| 49 | + <List start={state.start} type={getType(state.ordered, level)} {...props}> |
| 50 | + <List.Item>{content[0]}</List.Item> |
| 51 | + <List.Item> |
| 52 | + {content[1]} |
| 53 | + <NestedList level={level + 1} {...props} /> |
| 54 | + </List.Item> |
| 55 | + <List.Item>{content[2]}</List.Item> |
| 56 | + <List.Item>{content[3]}</List.Item> |
| 57 | + </List> |
| 58 | + ); |
| 59 | + } else { |
| 60 | + return <></>; |
| 61 | + } |
| 62 | +}; |
| 63 | + |
| 64 | +<> |
| 65 | + <Well recessed style={{ width: 300 }}> |
| 66 | + <Field> |
| 67 | + <Checkbox |
| 68 | + checked={state.ordered} |
| 69 | + onChange={event => setState({ ordered: event.target.checked })} |
| 70 | + > |
| 71 | + <Label style={{ marginBottom: 8 }}>Ordered</Label> |
| 72 | + </Checkbox> |
| 73 | + </Field> |
| 74 | + <RangeField> |
| 75 | + <RangeLabel>Levels</RangeLabel> |
| 76 | + <Range |
| 77 | + max={9} |
| 78 | + min={1} |
| 79 | + value={state.levels} |
| 80 | + onChange={event => setState({ levels: event.target.value })} |
| 81 | + /> |
| 82 | + </RangeField> |
| 83 | + <RangeField> |
| 84 | + <RangeLabel>Length</RangeLabel> |
| 85 | + <Range |
| 86 | + max={text[0].length} |
| 87 | + min={1} |
| 88 | + value={state.length} |
| 89 | + onChange={event => setState({ length: event.target.value })} |
| 90 | + /> |
| 91 | + </RangeField> |
| 92 | + <Dropdown selectedItem={state.size} onSelect={size => setState({ size })}> |
| 93 | + <SelectField> |
| 94 | + <SelectLabel>Size</SelectLabel> |
| 95 | + <Select small>{state.size}</Select> |
| 96 | + </SelectField> |
| 97 | + <Menu small> |
| 98 | + <MenuItem value="small">small</MenuItem> |
| 99 | + <MenuItem value="medium">medium (default)</MenuItem> |
| 100 | + <MenuItem value="large">large</MenuItem> |
| 101 | + </Menu> |
| 102 | + </Dropdown> |
| 103 | + <Field> |
| 104 | + <Label>Start</Label> |
| 105 | + <Input |
| 106 | + disabled={!state.ordered} |
| 107 | + small |
| 108 | + type="number" |
| 109 | + value={state.start} |
| 110 | + onChange={event => setState({ start: event.target.value })} |
| 111 | + /> |
| 112 | + </Field> |
| 113 | + </Well> |
| 114 | + <MD tag="p"> |
| 115 | + Nori grape silver beet broccoli kombu beet greens fava bean potato quandong celery. Bunya nuts |
| 116 | + black-eyed pea prairie turnip leek lentil turnip greens parsnip. Sea lettuce lettuce water |
| 117 | + chestnut eggplant winter purslane fennel azuki bean earthnut pea sierra leone bologi leek soko |
| 118 | + chicory celtuce parsley jícama salsify. |
| 119 | + </MD> |
| 120 | + <NestedList {...state} /> |
| 121 | + <MD tag="p" style={{ marginBottom: 0 }}> |
| 122 | + Soko radicchio bunya nuts gram dulse silver beet parsnip napa cabbage lotus root sea lettuce |
| 123 | + brussels sprout cabbage. Catsear cauliflower garbanzo yarrow salsify chicory garlic bell pepper |
| 124 | + napa cabbage lettuce tomato kale arugula melon sierra leone bologi rutabaga tigernut. Sea |
| 125 | + lettuce gumbo grape kale kombu cauliflower salsify kohlrabi okra. |
| 126 | + </MD> |
| 127 | +</>; |
| 128 | +``` |
0 commit comments