diff --git a/packages/docs-app/src/examples/core-examples/sectionExample.tsx b/packages/docs-app/src/examples/core-examples/sectionExample.tsx index 8673dbc08b..c8b88bfe09 100644 --- a/packages/docs-app/src/examples/core-examples/sectionExample.tsx +++ b/packages/docs-app/src/examples/core-examples/sectionExample.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2023 Palantir Technologies, Inc. All rights reserved. + * Copyright 2025 Palantir Technologies, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ import { Slider, Switch, } from "@blueprintjs/core"; -import { Example, type ExampleProps } from "@blueprintjs/docs-theme"; +import { Example, type ExampleProps, handleBooleanChange } from "@blueprintjs/docs-theme"; import { IconNames } from "@blueprintjs/icons"; export interface SectionExampleState { @@ -54,177 +54,137 @@ const BASIL_DESCRIPTION_TEXT = dedent` from Central Africa to Southeast Asia. `; -export class SectionExample extends React.PureComponent { - public state: SectionExampleState = { - collapsible: false, - defaultIsOpen: true, - elevation: Elevation.ZERO, - hasDescription: false, - hasIcon: false, - hasMultipleCards: false, - hasRightElement: true, - isCompact: false, - isControlled: false, - isOpen: true, - isPanelPadded: true, - }; - - private editableTextRef = React.createRef(); - - public render() { - const { - collapsible, - defaultIsOpen, - elevation, - hasDescription, - hasIcon, - hasRightElement, - hasMultipleCards, - isCompact, - isPanelPadded, - } = this.state; - - const options = ( - <> -
-
Section Props
- - - - - - - - -
- -
-
Collapse Props
- - - -
- -
-
Children
- = props => { + const [collapsible, setCollapsible] = React.useState(false); + const [defaultIsOpen, setDefaultIsOpen] = React.useState(true); + const [elevation, setElevation] = React.useState(Elevation.ZERO); + const [hasDescription, setHasDescription] = React.useState(false); + const [hasIcon, setHasIcon] = React.useState(false); + const [hasMultipleCards, setHasMultipleCards] = React.useState(false); + const [hasRightElement, setHasRightElement] = React.useState(true); + const [isCompact, setIsCompact] = React.useState(false); + const [isControlled, setIsControlled] = React.useState(false); + const [isOpen, setIsOpen] = React.useState(true); + const [isPanelPadded, setIsPanelPadded] = React.useState(true); + + const editableTextRef = React.useRef(null); + + const handleEditContent = React.useCallback((event: React.MouseEvent) => { + event.stopPropagation(); + editableTextRef.current.focus(); + }, []); + + const handleElevationChange = React.useCallback((value: SectionElevation) => setElevation(value), []); + + const handleToggle = React.useCallback(() => setIsOpen(value => !value), []); + + const options = ( + <> +
+
Section Props
+ + + + + + + - -
SectionCard Props
- -
- - ); - - const descriptionContent = ( - - ); - - const metadataContent = ( -
-
- KingdomPlantae -
-
- CladeTracheophytes -
-
- FamilyLamiaceae -
+
- ); - - const collapseProps = this.state.isControlled - ? { isOpen: this.state.isOpen, onToggle: this.toggleIsOpen } - : { defaultIsOpen }; - - return ( - -
- ) : undefined - } - subtitle={hasDescription ? "Ocimum basilicum" : undefined} - title="Basil" - > - {descriptionContent} - {hasMultipleCards && {metadataContent}} -
-
- ); - } - private toggleIsCompact = () => this.setState({ isCompact: !this.state.isCompact }); - - private toggleHasIcon = () => this.setState({ hasIcon: !this.state.hasIcon }); - - private toggleHasDescription = () => this.setState({ hasDescription: !this.state.hasDescription }); - - private toggleHasRightElement = () => this.setState({ hasRightElement: !this.state.hasRightElement }); - - private toggleMultiplePanels = () => this.setState({ hasMultipleCards: !this.state.hasMultipleCards }); - - private toggleCollapsible = () => this.setState({ collapsible: !this.state.collapsible }); - - private toggleDefaultIsOpen = () => this.setState({ defaultIsOpen: !this.state.defaultIsOpen }); - - private togglePanelIsPadded = () => this.setState({ isPanelPadded: !this.state.isPanelPadded }); - - private toggleIsControlled = () => this.setState({ isControlled: !this.state.isControlled }); - - private toggleIsOpen = () => this.setState({ isOpen: !this.state.isOpen }); +
+
Collapse Props
+ + + +
- private handleElevationChange = (elevation: SectionElevation) => this.setState({ elevation }); +
+
Children
+ - private handleEditContent = (event: React.MouseEvent) => { - // prevent this event from toggling the collapse state - event.stopPropagation(); - this.editableTextRef?.current?.focus(); - }; -} +
SectionCard Props
+ +
+ + ); + + const collapseProps = isControlled ? { isOpen, onToggle: handleToggle } : { defaultIsOpen }; + + return ( + +
+ ) : undefined + } + subtitle={hasDescription ? "Ocimum basilicum" : undefined} + title="Basil" + > + + + + {hasMultipleCards && ( + +
+
+ KingdomPlantae +
+
+ CladeTracheophytes +
+
+ FamilyLamiaceae +
+
+
+ )} +
+
+ ); +};