diff --git a/.changeset/forty-cobras-lay.md b/.changeset/forty-cobras-lay.md new file mode 100644 index 00000000000..dce628a81d8 --- /dev/null +++ b/.changeset/forty-cobras-lay.md @@ -0,0 +1,5 @@ +--- +'polaris.shopify.com': minor +--- + +Added ability to collapse props that have been expanded. diff --git a/polaris.shopify.com/src/components/PropsTable/PropsTable.module.scss b/polaris.shopify.com/src/components/PropsTable/PropsTable.module.scss index b5ad2b944c3..9aa57b9fa41 100644 --- a/polaris.shopify.com/src/components/PropsTable/PropsTable.module.scss +++ b/polaris.shopify.com/src/components/PropsTable/PropsTable.module.scss @@ -34,12 +34,25 @@ } .TypeTableHeader { + display: flex; + align-items: center; width: 100%; text-align: left; color: var(--code-keyword); font-family: var(--font-family-mono); padding: 0.66em 1em; background: rgba(0, 0, 0, 0.02); + + button { + margin-left: auto; + background: transparent; + color: var(--text-subdued); + + &:hover { + color: var(--text-strong); + } + } + @include dark-mode { background: rgba(255, 255, 255, 0.05); } @@ -66,7 +79,6 @@ .Key { display: flex; - flex-direction: column; gap: 0.6rem; @media screen and (max-width: $breakpointMobile) { diff --git a/polaris.shopify.com/src/components/PropsTable/PropsTable.tsx b/polaris.shopify.com/src/components/PropsTable/PropsTable.tsx index e185ccbba7e..0e64d0a106f 100644 --- a/polaris.shopify.com/src/components/PropsTable/PropsTable.tsx +++ b/polaris.shopify.com/src/components/PropsTable/PropsTable.tsx @@ -59,7 +59,9 @@ function PropsTable({types, componentName}: Props) { )} - + + + ); @@ -70,58 +72,80 @@ type ExpandedTypeInfo = {memberName: string | null; typeName: string}; const ExpandedTypesContext = createContext<{ expandedTypes: ExpandedTypeInfo[]; expandType: (typeName: string) => void; + collapseType: (typeName: string) => void; currentMember: string | null; -}>({expandType: () => undefined, expandedTypes: [], currentMember: null}); +}>({ + expandType: () => undefined, + collapseType: () => undefined, + expandedTypes: [], + currentMember: null, +}); function TypeTable({ types, type, + level = 0, }: { types: FilteredTypes; type: Type; level?: number; }) { const [expandedTypes, setExpandedTypes] = useState([]); + const {collapseType} = useContext(ExpandedTypesContext); return (
- {syntaxKindToDeveloperFriendlyString(type.syntaxKind)} {type.name} + {syntaxKindToDeveloperFriendlyString(type.syntaxKind)} {type.name}{' '} + {typeof level === 'number' && level > 0 && ( + + )}
{!type.members && ( { + expandType: (typeName: string) => setExpandedTypes([ {typeName, memberName: null}, ...expandedTypes, - ]); - }, + ]), + collapseType: () => undefined, currentMember: null, }} >
- {expandedTypes - .filter((expanded) => expanded.memberName === null) - .map((expanded) => { - const typeForExpandedType = types[expanded.typeName]; - if (!typeForExpandedType) return null; - return ( - - ); - })} + + {expandedTypes + .filter((expanded) => expanded.memberName === null) + .map((expanded) => { + const typeForExpandedType = types[expanded.typeName]; + if (!typeForExpandedType) return null; + return ( + + ); + })} +
)} @@ -137,16 +161,33 @@ function TypeTable({ value, deprecationMessage, }) => { - const expandType = (typeName: string) => + const expandType = (typeName: string) => { setExpandedTypes([ {typeName, memberName: name}, ...expandedTypes, ]); + }; + + const collapseType = (typeName: string) => + setExpandedTypes((types) => + types.filter( + (typeInfo) => + !( + typeInfo.typeName === typeName && + typeInfo.memberName === name + ), + ), + ); return (
@@ -200,6 +241,7 @@ function TypeTable({ key={expanded.typeName} types={types} type={typeForExpandedType} + level={level + 1} /> ); })} @@ -226,7 +268,7 @@ function Highlighter({ const {expandType, expandedTypes, currentMember} = useContext(ExpandedTypesContext); const {types} = useContext(TypeContext); - const hasBenExpanded = expandedTypes.some( + const hasBeenExpanded = expandedTypes.some( (expandedType) => expandedType.typeName === type && expandedType.memberName === currentMember, @@ -275,8 +317,8 @@ function Highlighter({