Tree control Collapse/Expand

303
4
03-11-2024 08:39 AM
Labels (2)
RachappaBellappa1
New Contributor III

Hi 

I was trying to use List Tree Control, but the collapse expand is not working when i try to implement in the widget, I copied code from this article https://developers.arcgis.com/experience-builder/storybook/?path=/docs/components-jimu-ui-basic-list... but expand collapse doesn't work, I tried this on developer edition 1.10, 1.13 but it's not working

 

RachappaBellappa1_0-1710171547596.png

 

 

 

0 Kudos
4 Replies
RachappaBellappa1
New Contributor III

@Jianxia any thoughts?

0 Kudos
TianWen
Esri Contributor

Could you please share the snippet of how you use the component so that we can further investigate? Thank you!

0 Kudos
RachappaBellappa1
New Contributor III

@TianWen I just copied the code snippet from storybook example and placed it inside the sample widget code. Please check the below screenshot

RachappaBellappa1_0-1710254189896.png

 

0 Kudos
TianWen
Esri Contributor

Thanks for the screenshot!

1. The tree component is driven by data, and you can set default data initially.

2. Any interactions with the component will generate updated data, which will be returned via the update function.

You will then need to pass this updated data back to the component.

Please refer to the snippet below for details.

TianWen_0-1710320968174.png

import { React, type AllWidgetProps } from 'jimu-core'
import { type IMConfig } from '../config'
import { Tree, TreeAlignmentType, TreeCollapseStyle, TreeStyle } from 'jimu-ui/basic/list-tree'

const Widget = (props: AllWidgetProps<IMConfig>) => {
  const getItemsJson = () => {
    const myCommands = [
      {
        label: 'Edit',
        iconProps: () => ({ icon: require('jimu-icons/svg/outlined/editor/edit.svg') }),
        action: (options) => { alert(`Edit fired for item: ${JSON.stringify(options.data.itemJsons, null, 2)}`) }
      }
    ]
    return {
      itemKey: 'root item for tree data entry',
      itemStateTitle: 'root item for tree data entry',
      itemChildren: [
        {
          itemKey: 'dummy entity 1',
          itemStateTitle: 'dummy entity 1',
          isItemSelectable: true,
          itemStateChecked: true,
          itemStateCommands: myCommands,
          itemStateDetailContent: JSON.stringify({ itemStateCommands: myCommands.map(i => i.label) }),
          itemStateIcon: () => ({ icon: require('jimu-icons/svg/outlined/gis/map.svg') })
        },
        {
          itemKey: 'dummy entity 2',
          itemStateTitle: 'dummy entity 2',
          itemStateExpanded: true,
          itemStateCommands: myCommands.slice(1),
          itemStateDetailContent: JSON.stringify({ itemStateCommands: myCommands.slice(1).map(i => i.label) }),
          itemStateIcon: () => ({ icon: require('jimu-icons/svg/outlined/gis/map.svg') }),
          itemChildren: [
            {
              itemKey: 'dummy entity 2.1',
              itemStateTitle: 'dummy entity 2.1',
              itemChildren: [
                {
                  itemKey: 'dummy entity 2.1.1',
                  itemStateTitle: 'dummy entity 2.1.1',
                  itemStateCommands: myCommands.slice(1)
                },
                {
                  itemKey: 'dummy entity 2.1.2',
                  itemStateTitle: 'dummy entity 2.1.2'
                }
              ]
            },
            {
              itemKey: 'dummy entity 2.2',
              itemStateTitle: 'dummy entity 2.2 (isItemSelectable = false)',
              isItemSelectable: false,
              itemChildren: [
                {
                  itemKey: 'dummy entity 2.2.1',
                  itemStateTitle: 'dummy entity 2.2.1'
                }
              ]
            }
          ]
        }
      ]
    }
  }

  const [rootItemJson, setRootItemJson] = React.useState(getItemsJson())

  return (
    <div className="widget-demo jimu-widget m-2">
      <p>Simple Widget</p>
      <p>exampleConfigProperty: {props.config.exampleConfigProperty}</p>
      <Tree
        size={'default'}
        collapseStyle={TreeCollapseStyle.PlusMinus}
        dndEnabled={false}
        treeAlignmentType={TreeAlignmentType.Typical}
        treeStyle={TreeStyle.Card}
        isMultiSelection={true}
        checkboxLinkage={true}
        rootItemJson={rootItemJson}
        onUpdateItem={(actionData, refComponent) => {
          if (actionData.changeItemJson) {
            const [nextRootItemJson] = actionData.itemJsons.slice(-1)
            setRootItemJson({ ...nextRootItemJson })
          }
        }}
      />
    </div>
  )
}

export default Widget

 

0 Kudos