+ render: (item: TreeItem<T>, level?: number) => ReactElement<{}>;
+ showSelection?: boolean | ((item: TreeItem<T>) => boolean);
+ levelIndentation?: number;
+ itemRightPadding?: number;
+ toggleItemActive: (event: React.MouseEvent<HTMLElement>, item: TreeItem<T>) => void;
+ toggleItemOpen: (event: React.MouseEvent<HTMLElement>, item: TreeItem<T>) => void;
+ toggleItemSelection?: (event: React.MouseEvent<HTMLElement>, item: TreeItem<T>) => void;
+
+ /**
+ * When set to true use radio buttons instead of checkboxes for item selection.
+ * This does not guarantee radio group behavior (i.e item mutual exclusivity).
+ * Any item selection logic must be done in the toggleItemActive callback prop.
+ */
+ useRadioButtons?: boolean;
+}
+
+const getActionAndId = (event: any, initAction: string | undefined = undefined) => {
+ const { nativeEvent: { target } } = event;
+ let currentTarget: HTMLElement = target as HTMLElement;
+ let action: string | undefined = initAction || currentTarget.dataset.action;
+ let id: string | undefined = currentTarget.dataset.id;
+
+ while (action === undefined || id === undefined) {
+ currentTarget = currentTarget.parentElement as HTMLElement;
+
+ if (!currentTarget) {
+ break;
+ }
+
+ action = action || currentTarget.dataset.action;
+ id = id || currentTarget.dataset.id;
+ }
+
+ return [action, id];
+};
+
+interface FlatTreeProps {
+ it: TreeItem<any>;
+ levelIndentation: number;
+ onContextMenu: Function;
+ handleToggleItemOpen: Function;
+ toggleItemActive: Function;
+ getToggableIconClassNames: Function;
+ getProperArrowAnimation: Function;
+ classes: any;