Skip to content

Commit 8b90cd2

Browse files
committed
add lending to event creating/editing
1 parent f8decdc commit 8b90cd2

File tree

4 files changed

+84
-9
lines changed

4 files changed

+84
-9
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { usePreparedEffect } from '@webkom/react-prepare';
2+
import { Field } from 'react-final-form';
3+
import { SelectInput, TextInput } from '~/components/Form';
4+
import { type EditingEvent } from '~/pages/events/utils';
5+
import { fetchAllLendableObjects } from '~/redux/actions/LendableObjectActions';
6+
import { useAppDispatch, useAppSelector } from '~/redux/hooks';
7+
import { selectAllLendableObjects } from '~/redux/slices/lendableObjects';
8+
import styles from '../EventEditor.module.css';
9+
10+
type Props = {
11+
values: EditingEvent;
12+
};
13+
14+
const LendingSection: React.FC<Props> = ({ values }) => {
15+
const dispatch = useAppDispatch();
16+
17+
usePreparedEffect(
18+
'fetchAllLendableObjects',
19+
() => dispatch(fetchAllLendableObjects()),
20+
[],
21+
);
22+
23+
const lendableObjects = useAppSelector(selectAllLendableObjects);
24+
const availableObjects = lendableObjects.filter((obj) => obj.canLend);
25+
26+
return (
27+
<>
28+
<Field
29+
name="lendingObjects"
30+
label="Søk etter utlånsobjekt"
31+
fieldClassName={styles.metaField}
32+
component={SelectInput.Field}
33+
options={availableObjects.map((obj) => ({
34+
label: obj.title,
35+
value: obj.id,
36+
}))}
37+
placeholder="Utlånsobjekt"
38+
isMulti
39+
description="Dette gjør det mulig for arrangementet å låne objekter for et arrangmenet. Dette gjøres ved å lage en separat utlånsforespørsel etter at arrangementet er opprettet, i ditt navn. Objektene vil ikke være reservert før utlånsforespørselen er godkjent. Objektene vil heller ikke endres hvis arrangment endres på. Du er selv ansvarlig for å sjekke at objektene er tilgjengelige for utlån på det tidspunktet arrangementet skal være. "
40+
/>
41+
42+
{values.lendingObjects &&
43+
values.lendingObjects.length > 0 &&
44+
values.lendingObjects.map((obj, i) => (
45+
<Field
46+
key={obj.value || i}
47+
name={`lendingDescription.${i}`}
48+
label={`Kommentar til lån av ${obj.label}`}
49+
placeholder="Forklar hva dere skal bruke objektet til, og eventuelle andre detaljer."
50+
component={TextInput.Field}
51+
/>
52+
))}
53+
</>
54+
);
55+
};
56+
57+
export default LendingSection;

lego-webapp/pages/events/src/EventEditor/EditorSection/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,4 @@ export { default as Header } from './Header';
5858
export { default as Details } from './Details';
5959
export { default as Registration } from './Registration';
6060
export { default as Descriptions } from './Descriptions';
61+
export { default as LendingSection } from './LendingSection';

lego-webapp/pages/events/src/EventEditor/index.tsx

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,14 @@ import EditorSection, {
6161
Details,
6262
Registration,
6363
Descriptions,
64+
LendingSection,
6465
} from './EditorSection';
66+
import { createLendingRequest } from '~/redux/actions/LendingRequestActions';
6567
import type { ActionGrant } from 'app/models';
6668
import type { EditingEvent } from '~/pages/events/utils';
6769
import type { UploadArgs } from '~/redux/actions/FileActions';
6870
import type { AdministrateEvent } from '~/redux/models/Event';
71+
import type { CreateLendingRequest } from '~/redux/models/LendingRequest';
6972

7073
const TypedLegoForm = LegoFinalForm<EditingEvent>;
7174

@@ -206,15 +209,30 @@ const EventEditor = () => {
206209
}
207210

208211
const onSubmit = (values: EditingEvent) => {
209-
(isEditPage
212+
const eventAction = isEditPage
210213
? dispatch(editEvent(transformEvent(values)))
211-
: dispatch(createEvent(transformEvent(values)))
212-
).then((res) => {
214+
: dispatch(createEvent(transformEvent(values)));
215+
216+
eventAction.then((res) => {
213217
const key: string = values.cover.split(':')[0];
214218
const token: string = values.cover.split(':')[1];
215219
if (values.saveToImageGallery) {
216220
dispatch(setSaveForUse(key, token, true));
217221
}
222+
223+
// Create lending request if lendingObjects exist and we're creating a new event
224+
if (values.lendingObjects && values.lendingObjects.length > 0) {
225+
for (let i = 0; i < values.lendingObjects.length; i++) {
226+
const lendingRequestData: CreateLendingRequest = {
227+
lendableObject: values.lendingObjects[i].value,
228+
comment: values.lendingDescription[i] || '',
229+
startDate: values.startTime,
230+
endDate: values.endTime,
231+
};
232+
dispatch(createLendingRequest(lendingRequestData));
233+
}
234+
}
235+
218236
navigate(
219237
isEditPage
220238
? `/events/${eventIdOrSlug}`
@@ -369,19 +387,18 @@ const EventEditor = () => {
369387
setImageGalleryUrl={setImageGalleryUrl}
370388
/>
371389
</EditorSection>
372-
373390
<EditorSection title="Detaljer" initiallyExpanded={!isEditPage}>
374391
<Details values={values} />
375392
</EditorSection>
376-
377393
<EditorSection title="Påmelding" initiallyExpanded={!isEditPage}>
378394
<Registration values={values} />
379395
</EditorSection>
380-
396+
<EditorSection title="Utstyrslån" initiallyExpanded={false}>
397+
<LendingSection values={values} />
398+
</EditorSection>
381399
<EditorSection title="Beskrivelse" collapsible={false}>
382400
<Descriptions uploadFile={uploadFile} values={values} />
383401
</EditorSection>
384-
385402
{!isEditPage && (
386403
<Field
387404
label={
@@ -419,7 +436,6 @@ const EventEditor = () => {
419436
required
420437
/>
421438
)}
422-
423439
<ButtonGroup>
424440
{isEditPage && (
425441
<LinkButton flat href={`/events/${eventIdOrSlug}`}>
@@ -430,7 +446,6 @@ const EventEditor = () => {
430446
{isEditPage ? 'Lagre endringer' : 'Opprett'}
431447
</SubmitButton>
432448
</ButtonGroup>
433-
434449
{isEditPage && <Admin actionGrant={actionGrant} event={values} />}
435450
</Form>
436451
)}

lego-webapp/pages/events/utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ export type EditingEvent = Event & {
118118
responsibleUsers: PublicUser[];
119119
saveToImageGallery: boolean;
120120
date: [Dateish, Dateish];
121+
lendingObjects: Option[];
122+
lendingDescription: string[];
121123
};
122124

123125
// Event fields that should be created or updated based on the API.

0 commit comments

Comments
 (0)