Commit dca2f104 authored by tom's avatar tom

expand all section at once

parent c8f652bc
import { Accordion, AccordionButton, AccordionIcon, AccordionItem, AccordionPanel, Box, Flex } from '@chakra-ui/react'; import { Accordion, AccordionButton, AccordionIcon, AccordionItem, AccordionPanel, Box, Flex, Link } from '@chakra-ui/react';
import _range from 'lodash/range';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import React from 'react'; import React from 'react';
...@@ -10,6 +11,7 @@ import ContractReadItemOutput from './ContractReadItemOutput'; ...@@ -10,6 +11,7 @@ import ContractReadItemOutput from './ContractReadItemOutput';
const ContractRead = () => { const ContractRead = () => {
const router = useRouter(); const router = useRouter();
const [ expandedSections, setExpandedSections ] = React.useState<Array<number>>([]);
const { data, isLoading, isError } = useApiQuery('contract_methods_read', { const { data, isLoading, isError } = useApiQuery('contract_methods_read', {
pathParams: { id: router.query.id?.toString() }, pathParams: { id: router.query.id?.toString() },
...@@ -18,6 +20,22 @@ const ContractRead = () => { ...@@ -18,6 +20,22 @@ const ContractRead = () => {
}, },
}); });
const handleAccordionStateChange = React.useCallback((newValue: Array<number>) => {
setExpandedSections(newValue);
}, []);
const handleExpandAll = React.useCallback(() => {
if (!data) {
return;
}
if (expandedSections.length < data.length) {
setExpandedSections(_range(0, data.length));
} else {
setExpandedSections([]);
}
}, [ data, expandedSections.length ]);
if (isError) { if (isError) {
return <DataFetchAlert/>; return <DataFetchAlert/>;
} }
...@@ -27,7 +45,7 @@ const ContractRead = () => { ...@@ -27,7 +45,7 @@ const ContractRead = () => {
} }
return ( return (
<Accordion allowMultiple> <Accordion allowMultiple position="relative" onChange={ handleAccordionStateChange } index={ expandedSections }>
{ data.map((item, index) => { { data.map((item, index) => {
return ( return (
<AccordionItem key={ item.name + '_' + item.method_id } as="section"> <AccordionItem key={ item.name + '_' + item.method_id } as="section">
...@@ -51,6 +69,10 @@ const ContractRead = () => { ...@@ -51,6 +69,10 @@ const ContractRead = () => {
</AccordionItem> </AccordionItem>
); );
}) } }) }
<Flex columnGap={ 3 } position="absolute" top={ 0 } right={ 0 } py={ 3 } lineHeight="27px">
<Link onClick={ handleExpandAll }>{ expandedSections.length === data.length ? 'Collapse' : 'Expand' } all</Link>
<Link>Reset</Link>
</Flex>
</Accordion> </Accordion>
); );
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment