Skip to content

Commit 08d1b75

Browse files
BrianL3Brian Ledbetter
andauthored
fix/matter-title-overflow (#260)
Added state-based handling of excessively long titles Co-authored-by: Brian Ledbetter <[email protected]>
1 parent 159eccb commit 08d1b75

File tree

4 files changed

+62
-6
lines changed

4 files changed

+62
-6
lines changed

src/components/Details/Legislation/LegislationIntroduction.stories.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
adoptedMatterStatus,
1111
rejectedMatterStatus,
1212
inProgressMatterStatus,
13+
longTitleMatterStatus,
1314
} from "../../../stories/model-mocks/matterStatus";
1415

1516
import LegislationIntroduction, { LegislationIntroductionProps } from "./LegislationIntroduction";
@@ -34,6 +35,11 @@ const inProgressProps: LegislationIntroductionProps = {
3435
indexedMatterGrams: [basicIndexMatterGram, rentBasicMatterGram],
3536
};
3637

38+
const longTitleProps: LegislationIntroductionProps = {
39+
matterStatus: longTitleMatterStatus,
40+
indexedMatterGrams: [basicIndexMatterGram, rentBasicMatterGram],
41+
};
42+
3743
const Template: Story<LegislationIntroductionProps> = (args) => (
3844
<LegislationIntroduction {...args} />
3945
);
@@ -46,3 +52,6 @@ rejectedStory.args = rejectedProps;
4652

4753
export const inProgressStory = Template.bind({});
4854
inProgressStory.args = inProgressProps;
55+
56+
export const longTitleStory = Template.bind({});
57+
longTitleStory.args = longTitleProps;

src/components/Details/Legislation/LegislationIntroduction.tsx

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,48 @@
1-
import React, { FC } from "react";
1+
import React, { FC, useState } from "react";
2+
import styled from "@emotion/styled";
3+
import { useMediaQuery } from "react-responsive";
4+
25
import MatterStatus from "../../../models/MatterStatus";
36
import IndexedMatterGram from "../../../models/IndexedMatterGram";
47
import { DecisionResult } from "../../Shared";
5-
8+
import { screenWidths } from "../../../styles/mediaBreakpoints";
69
export interface LegislationIntroductionProps {
710
matterStatus: MatterStatus;
811
indexedMatterGrams: IndexedMatterGram[];
912
}
1013

14+
const Title = styled.b<{ minified: boolean; linesToShow: number }>((props) => ({
15+
overflow: "hidden",
16+
"text-overflow": "ellipsis",
17+
display: "-webkit-box",
18+
"-webkit-line-clamp": props.minified
19+
? `${props.linesToShow}`
20+
: "none" /* number of lines to show, 'none' means no limit */,
21+
"line-clamp": props.minified ? `${props.linesToShow}` : "none",
22+
"-webkit-box-orient": "vertical",
23+
}));
24+
1125
const LegislationIntroduction: FC<LegislationIntroductionProps> = ({
1226
matterStatus,
1327
indexedMatterGrams,
1428
}: LegislationIntroductionProps) => {
29+
const [fullTitleVisible, setFullTitleVisible] = useState(true);
30+
31+
const isMobile = useMediaQuery({ query: `(max-width: ${screenWidths.tablet})` });
32+
const linesToShow = isMobile ? 4 : 2;
33+
1534
return (
1635
<div>
1736
<h1 className="mzp-u-title-sm">{matterStatus.matter?.name}</h1>
18-
<b>{matterStatus.matter?.title}</b>
37+
<Title
38+
onClick={() => {
39+
setFullTitleVisible(!fullTitleVisible);
40+
}}
41+
minified={fullTitleVisible}
42+
linesToShow={linesToShow}
43+
>
44+
{matterStatus.matter?.title}
45+
</Title>
1946
<div
2047
style={{
2148
display: "flex",

src/stories/model-mocks/matter.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,13 @@ const basicMatter: Matter = {
1616
"AN ORDINANCE creating an Indigenous Advisory Council for tribal and urban Indian engagement; adding a new Chapter 3.75 to the Seattle Municipal Code; and amending Section 3.35.050 of the Seattle Municipal Code.",
1717
};
1818

19-
export { basicMatter };
19+
const matterWithInordinatelyLongTitle = {
20+
id: "matterWithInordinatelyLongTitle id",
21+
external_source_id: "matterWithInordinatelyLongTitle external source id",
22+
matter_type: "matterWithInordinatelyLongTitle type",
23+
name: "VERY LONGLY-TITLED MATTER 123.44",
24+
title:
25+
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut placerat orci nulla pellentesque dignissim enim sit. Ut porttitor leo a diam. Pellentesque adipiscing commodo elit at imperdiet dui accumsan sit amet. Vitae ultricies leo integer malesuada nunc vel risus commodo. Varius quam quisque id diam vel quam. Sed turpis tincidunt id aliquet risus feugiat in ante. Magna fringilla urna porttitor rhoncus dolor purus non enim praesent. Nunc consequat interdum varius sit amet mattis. Tortor id aliquet lectus proin. Non odio euismod lacinia at quis risus sed vulputate odio. Dolor sed viverra ipsum nunc aliquet bibendum enim facilisis gravida. Nascetur ridiculus mus mauris vitae ultricies leo integer malesuada nunc. Amet consectetur adipiscing elit pellentesque habitant morbi tristique senectus. Id consectetur purus ut faucibus pulvinar elementum integer enim neque. Venenatis a condimentum vitae sapien pellentesque habitant morbi tristique senectus. Pretium lectus quam id leo in vitae turpis massa. Duis at tellus at urna condimentum mattis pellentesque id nibh. Sed viverra ipsum nunc aliquet bibendum enim facilisis gravida neque. Ullamcorper morbi tincidunt ornare massa eget egestas purus viverra. Egestas fringilla phasellus faucibus scelerisque. Suscipit tellus mauris a diam maecenas sed enim. Dictumst quisque sagittis purus sit amet volutpat consequat. Imperdiet proin fermentum leo vel orci porta non. Diam quis enim lobortis scelerisque fermentum dui faucibus. Pellentesque id nibh tortor id. Augue ut lectus arcu bibendum at varius vel. Auctor augue mauris augue neque gravida in. Rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Arcu vitae elementum curabitur vitae nunc sed velit dignissim sodales. A iaculis at erat pellentesque. Nam at lectus urna duis. Suscipit tellus mauris a diam. Fermentum odio eu feugiat pretium nibh. Nulla at volutpat diam ut. Eu non diam phasellus vestibulum lorem. Amet risus nullam eget felis eget nunc lobortis mattis. Integer feugiat scelerisque varius morbi enim nunc faucibus a pellentesque. Mattis vulputate enim nulla aliquet porttitor lacus luctus. Adipiscing elit duis tristique sollicitudin nibh sit. Ipsum dolor sit amet consectetur adipiscing elit pellentesque habitant morbi. Volutpat maecenas volutpat blandit aliquam etiam erat velit scelerisque in. Eu consequat ac felis donec et odio pellentesque. Et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Enim ut sem viverra aliquet eget sit amet tellus cras. Adipiscing elit ut aliquam purus sit amet luctus venenatis. Purus in mollis nunc sed id semper. Velit dignissim sodales ut eu sem integer. Sagittis eu volutpat odio facilisis mauris sit amet. Commodo viverra maecenas accumsan lacus. Convallis aenean et tortor at risus viverra. Integer feugiat scelerisque varius morbi enim nunc faucibus a. Imperdiet nulla malesuada pellentesque elit. Leo duis ut diam quam. Id faucibus nisl tincidunt eget nullam non nisi est sit. Amet volutpat consequat mauris nunc congue nisi vitae suscipit. Massa tincidunt dui ut ornare. Viverra nam libero justo laoreet sit amet. At ultrices mi tempus imperdiet nulla malesuada. Dictum sit amet justo donec enim diam vulputate ut pharetra. Integer malesuada nunc vel risus. In eu mi bibendum neque egestas. In fermentum posuere urna nec tincidunt praesent semper feugiat. Egestas quis ipsum suspendisse ultrices. Aliquet bibendum enim facilisis gravida neque. Consectetur adipiscing elit ut aliquam purus. Pulvinar elementum integer enim neque volutpat ac tincidunt vitae. Nunc aliquet bibendum enim facilisis gravida neque convallis. Egestas tellus rutrum tellus pellentesque eu tincidunt tortor aliquam. Lorem mollis aliquam ut porttitor leo a diam. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras. Nibh cras pulvinar mattis nunc. Ac orci phasellus egestas tellus rutrum. Habitant morbi tristique senectus et netus et malesuada fames. Vitae et leo duis ut diam quam nulla porttitor. Donec massa sapien faucibus et molestie ac feugiat sed. Nulla pharetra diam sit amet nisl suscipit adipiscing. Facilisis sed odio morbi quis. Sed risus pretium quam vulputate. Velit euismod in pellentesque massa. Lacus vel facilisis volutpat est velit egestas dui id. Amet mattis vulputate enim nulla. Orci porta non pulvinar neque laoreet suspendisse interdum consectetur libero. Enim eu turpis egestas pretium. Posuere sollicitudin aliquam ultrices sagittis orci a. Nulla facilisi cras fermentum odio. Curabitur vitae nunc sed velit dignissim sodales ut eu. Ultrices vitae auctor eu augue ut lectus arcu bibendum at. Aliquet bibendum enim facilisis gravida. Etiam sit amet nisl purus. Massa enim nec dui nunc. Fermentum et sollicitudin ac orci phasellus egestas tellus rutrum. Risus quis varius quam quisque. Phasellus vestibulum lorem sed risus. Eget aliquet nibh praesent tristique magna sit. Vestibulum rhoncus est pellentesque elit. Est pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Habitant morbi tristique senectus et. Et netus et malesuada fames ac turpis egestas maecenas pharetra. Fermentum dui faucibus in ornare quam. Donec massa sapien faucibus et molestie ac feugiat sed lectus. Integer feugiat scelerisque varius morbi. In nisl nisi scelerisque eu ultrices vitae. Proin libero nunc consequat interdum varius sit amet mattis vulputate. Mi eget mauris pharetra et ultrices neque ornare aenean. Non diam phasellus vestibulum lorem sed risus. Dapibus ultrices in iaculis nunc sed. Facilisis magna etiam tempor orci eu. Convallis posuere morbi leo urna. Quam id leo in vitae turpis massa sed elementum. Lectus sit amet est placerat in egestas erat imperdiet. Parturient montes nascetur ridiculus mus. Risus ultricies tristique nulla aliquet enim tortor. Lobortis mattis aliquam faucibus purus in. Pellentesque elit ullamcorper dignissim cras tincidunt lobortis feugiat. Malesuada proin libero nunc consequat interdum varius sit. Dolor sit amet consectetur adipiscing elit pellentesque. Tincidunt ornare massa eget egestas purus viverra accumsan. Sodales neque sodales ut etiam sit. Cras adipiscing enim eu turpis. Egestas purus viverra accumsan in nisl nisi scelerisque eu. Nunc lobortis mattis aliquam faucibus purus in. Mauris sit amet massa vitae tortor condimentum lacinia. Porttitor eget dolor morbi non arcu risus quis. Risus viverra adipiscing at in tellus. Accumsan sit amet nulla facilisi. Scelerisque purus semper eget duis at tellus at. At in tellus integer feugiat scelerisque varius morbi enim. Gravida dictum fusce ut placerat orci nulla pellentesque dignissim. Scelerisque in dictum non consectetur a erat nam at lectus. Duis tristique sollicitudin nibh sit amet commodo. Non tellus orci ac auctor augue mauris augue neque gravida. Potenti nullam ac tortor vitae.",
26+
};
27+
28+
export { basicMatter, matterWithInordinatelyLongTitle };

src/stories/model-mocks/matterStatus.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import MatterStatus from "../../models/MatterStatus";
22
import { MATTER_STATUS_DECISION } from "../../models/constants";
3-
import { basicMatter } from "./matter";
3+
import { basicMatter, matterWithInordinatelyLongTitle } from "./matter";
44
import { basicPassEventMinutesItem } from "./eventMinutesItem";
55

66
const adoptedMatterStatus: MatterStatus = {
@@ -36,4 +36,15 @@ const inProgressMatterStatus: MatterStatus = {
3636
update_datetime: new Date(),
3737
};
3838

39-
export { adoptedMatterStatus, rejectedMatterStatus, inProgressMatterStatus };
39+
const longTitleMatterStatus: MatterStatus = {
40+
id: "longTitleMatterStatus-test",
41+
event_minutes_item_ref: "event_minutes_item_ref",
42+
event_minutes_item: basicPassEventMinutesItem,
43+
external_source_id: "external_source_id",
44+
matter_ref: "matter_ref",
45+
matter: matterWithInordinatelyLongTitle,
46+
status: MATTER_STATUS_DECISION.ADOPTED,
47+
update_datetime: new Date(),
48+
};
49+
50+
export { adoptedMatterStatus, rejectedMatterStatus, inProgressMatterStatus, longTitleMatterStatus };

0 commit comments

Comments
 (0)