Skip to content

Commit 3430cc9

Browse files
committed
Fix image and add practical info
1 parent 400fe5d commit 3430cc9

File tree

2 files changed

+92
-39
lines changed

2 files changed

+92
-39
lines changed

lego-webapp/pages/lending/@lendableObjectId/+Page.tsx

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,37 @@
1-
import { Page, LinkButton, Image, Card, Flex } from '@webkom/lego-bricks';
2-
import { Package } from 'lucide-react';
1+
import { Page, LinkButton, Image, Card } from '@webkom/lego-bricks';
2+
import { Package, Contact, Tag } from 'lucide-react';
33
import { useState } from 'react';
44
import { Helmet } from 'react-helmet-async';
55
import { Dateish } from 'app/models';
6-
import {
7-
ContentMain,
8-
ContentSection,
9-
ContentSidebar,
10-
} from '~/components/Content';
116
import DisplayContent from '~/components/DisplayContent';
7+
import { readmeIfy } from '~/components/ReadmeLogo';
128
import TextWithIcon from '~/components/TextWithIcon';
139
import { useFetchedLendableObject } from '~/pages/lending/@lendableObjectId/useFetchedLendableObject';
10+
import { useAppSelector } from '~/redux/hooks';
11+
import { selectGroupsByIds } from '~/redux/slices/groups';
12+
import { LENDABLE_CATEGORY } from '~/utils/constants';
13+
import truncateString from '~/utils/truncateString';
1414
import { useParams } from '~/utils/useParams';
1515
import LendingCalendar from './LendingCalendar';
1616
import LendingRequestEditor from './LendingRequestEditor';
1717
import styles from './Page.module.css';
1818

19+
export const formatGroups = (groups: { name: string }[]) => {
20+
return groups.length > 0 ? groups.map((g) => g.name).join(', ') : 'Ukjent';
21+
};
22+
1923
export const LendableObjectList = () => {
2024
const { lendableObjectId } = useParams<{ lendableObjectId: string }>();
2125
const { lendableObject, fetching } = useFetchedLendableObject(
2226
lendableObjectId!,
2327
);
28+
29+
const responsibleGroups = useAppSelector((state) =>
30+
selectGroupsByIds(state, lendableObject?.responsibleGroups),
31+
);
32+
33+
const formattedGroups = formatGroups(responsibleGroups) || '';
34+
2435
const [range, setRange] = useState<[Dateish, Dateish] | undefined>();
2536

2637
const title = lendableObject ? `Utlån: ${lendableObject.title}` : undefined;
@@ -51,24 +62,42 @@ export const LendableObjectList = () => {
5162
</Card>
5263
)}
5364
<DisplayContent content={lendableObject.description} />
54-
<TextWithIcon
55-
iconNode={<Package />}
56-
size={20}
57-
content={lendableObject.location}
58-
/>
5965
</div>
6066
{lendableObject.image && (
61-
<Card className={styles.card}>
62-
<Image
63-
className={styles.image}
64-
alt="image of lendeable object"
65-
src={lendableObject.image}
66-
/>
67-
</Card>
67+
<div className={styles.infoRight}>
68+
<Card className={styles.imageCard}>
69+
<Image
70+
className={styles.image}
71+
alt="image of lendeable object"
72+
src={lendableObject.image}
73+
/>
74+
</Card>
75+
<Card className={styles.practicalInfo}>
76+
<h4>Praktisk Info:</h4>
77+
<TextWithIcon
78+
iconNode={<Contact />}
79+
size={20}
80+
gap={'var(--spacing-xs)'}
81+
content={readmeIfy(truncateString(formattedGroups, 15))}
82+
/>
83+
<TextWithIcon
84+
iconNode={<Package />}
85+
size={20}
86+
gap={'var(--spacing-xs)'}
87+
content={lendableObject.location}
88+
/>
89+
<TextWithIcon
90+
iconNode={<Tag />}
91+
size={20}
92+
gap={'var(--spacing-xs)'}
93+
content={LENDABLE_CATEGORY[lendableObject.category]}
94+
/>
95+
</Card>
96+
</div>
6897
)}
6998
</div>
70-
<div className={styles.border} />
71-
<div>
99+
<div className={styles.border}></div>
100+
<div className={styles.lendingCalendar}>
72101
<LendingCalendar
73102
selectedRange={range}
74103
lendableObjectId={lendableObjectId}

lego-webapp/pages/lending/@lendableObjectId/Page.module.css

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,52 @@
11
@import url('styles/custom-media.css');
22

3-
.card {
4-
margin: var(--spacing-md) 0;
3+
.container {
4+
margin: var(--spacing-sm) 0;
5+
font-size: var(--font-size-md);
6+
}
7+
8+
.infoRight {
9+
display: flex;
10+
flex-direction: column;
11+
gap: var(--spacing-md);
12+
}
13+
14+
.info {
15+
display: flex;
16+
gap: var(--spacing-md);
17+
font-size: var(--font-size-md);
18+
position: relative;
19+
20+
@media (--small-viewport) {
21+
flex-direction: column-reverse;
22+
align-items: center;
23+
}
24+
}
25+
26+
.imageCard {
527
padding: 0;
628
width: 250px;
29+
height: fit-content;
30+
}
31+
32+
.practicalInfo {
33+
padding: var(--spacing-md);
34+
font-size: var(--font-size-sm);
35+
gap: var(--spacing-xs);
36+
37+
@media (--small-viewport) {
38+
display: none;
39+
}
40+
}
41+
42+
.practicalInfo > h4 {
43+
color: var(--lego-font-color);
44+
font-size: var(--font-size-md);
45+
margin-bottom: var(--spacing-xs);
746
}
847

948
.border {
49+
margin: var(--spacing-md) 0;
1050
border-bottom: 2px solid var(--border-gray);
1151
}
1252

@@ -18,19 +58,3 @@
1858
.description {
1959
flex-grow: 1;
2060
}
21-
22-
.container {
23-
margin: var(--spacing-sm) 0;
24-
font-size: var(--font-size-md);
25-
color: var(--color-gray-6);
26-
}
27-
28-
.info {
29-
font-size: var(--font-size-md);
30-
display: flex;
31-
32-
@media (--small-viewport) {
33-
flex-direction: column-reverse;
34-
align-items: center;
35-
}
36-
}

0 commit comments

Comments
 (0)