Skip to content

Commit 2ad2613

Browse files
committed
reorder types
1 parent 5c08c1f commit 2ad2613

4 files changed

Lines changed: 125 additions & 112 deletions

File tree

src/pages/components/map-related/MapLayers/ComplaintModal.tsx

Lines changed: 12 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ComplaintFormSchemaAnyOf, GtfsRoutePydanticModel } from '@hasadna/open-bus-api-client'
1+
import { ComplaintFormSchemaAnyOf } from '@hasadna/open-bus-api-client'
22
import { Close } from '@mui/icons-material'
33
import {
44
Alert,
@@ -23,61 +23,25 @@ import {
2323
useCitiesQuery,
2424
useLinesQuery,
2525
} from 'src/hooks/useFormQuerys'
26-
import { Point } from 'src/pages/timeBasedMap'
2726
import { EasterEgg } from '../../../EasterEgg/EasterEgg'
2827
import { Row } from '../../Row'
2928
import {
3029
allComplaintFields,
3130
buildComplaintTitle,
32-
ComplaintField,
3331
createAllRules,
3432
mobileOnly,
3533
RenderField,
3634
} from './ComplaintModalFields'
37-
import { type ComplaintType, complaintTypeMappings, complaintTypes } from './ComplaintModalForms'
38-
39-
interface User {
40-
firstName: string
41-
lastName: string
42-
iDNum: string
43-
email: string
44-
mobile: string
45-
}
46-
47-
interface ComplaintData {
48-
complaintType: ComplaintType
49-
applyContent: string
50-
busOperator?: number
51-
licenseNum?: string
52-
eventDate?: dayjs.Dayjs
53-
lineNumberText?: string
54-
eventHour?: dayjs.Dayjs
55-
direction?: number
56-
wait?: [dayjs.Dayjs, dayjs.Dayjs]
57-
raisingStation?: number
58-
raisingStationCity?: string
59-
destinationStationCity?: string
60-
reportdate?: dayjs.Dayjs
61-
reportTime?: dayjs.Dayjs
62-
busDirectionFrom?: string
63-
busDirectionTo?: string
64-
addOrRemoveStation?: '1' | '2'
65-
raisingStationAddress?: string
66-
firstDeclaration?: boolean
67-
secondDeclaration?: boolean
68-
ravKavNumber?: string
69-
addingFrequencyReason?: ('LoadTopics' | 'LongWaiting' | 'ExtensionHours')[]
70-
debug?: boolean
71-
}
72-
73-
type ComplaintFormValues = User & ComplaintData
74-
75-
interface ComplaintModalProps {
76-
modalOpen?: boolean
77-
setModalOpen?: (open: boolean) => void
78-
position: Point
79-
route: GtfsRoutePydanticModel
80-
}
35+
import { complaintTypeMappings } from './ComplaintModalForms'
36+
import {
37+
ComplaintData,
38+
ComplaintField,
39+
ComplaintFormValues,
40+
ComplaintModalProps,
41+
ComplaintType,
42+
complaintTypes,
43+
ComplaintUser,
44+
} from './ComplaintTypes'
8145

8246
const RESET_ROUTE_KEYS = new Set(['eventDate', 'busOperator', 'lineNumberText'])
8347
const USER_KEYS = new Set(['firstName', 'lastName', 'iDNum', 'email', 'mobile'])
@@ -104,7 +68,7 @@ const ComplaintModal = ({
10468
}: ComplaintModalProps) => {
10569
const { t, i18n } = useTranslation()
10670
const [form] = Form.useForm<ComplaintFormValues>()
107-
const [userStorage, SetUserStorage] = useLocalStorage<Partial<User>>('complaint', {})
71+
const [userStorage, SetUserStorage] = useLocalStorage<Partial<ComplaintUser>>('complaint', {})
10872
const [, copy] = useCopyToClipboard()
10973

11074
const debug = Form.useWatch('debug', form)

src/pages/components/map-related/MapLayers/ComplaintModalFields.tsx

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { useTranslation } from 'react-i18next'
2323
import dayjs from 'src/dayjs'
2424
import { useGovTimeQuery } from 'src/hooks/useFormQuerys'
2525
import { complaintTypeMappings } from './ComplaintModalForms'
26+
import { ComplaintTitleData, FormFieldProps } from './ComplaintTypes'
2627

2728
// --- Validators ---
2829
const numberOnly = /^[0-9]+$/u
@@ -79,7 +80,7 @@ export const createAllRules = (form: FormInstance, t: TFunction) => ({
7980
// --- Field Components ---
8081
const fullWidth = { width: '100%' }
8182

82-
const fieldComponents = {
83+
export const fieldComponents = {
8384
Input: (props: InputProps) => <Input {...props} style={fullWidth} />,
8485
TextArea: (props: TextAreaProps) => <Input.TextArea {...props} style={fullWidth} />,
8586
DatePicker: (props: DatePickerProps) => {
@@ -106,17 +107,6 @@ const fieldComponents = {
106107
Select: (props: SelectProps) => <Select {...props} style={fullWidth} showSearch allowClear />,
107108
} as const
108109

109-
type FieldType = keyof typeof fieldComponents
110-
111-
export type FormFieldProps<T extends FieldType = FieldType> = {
112-
name: string
113-
type: T
114-
rules?: Rule[]
115-
props?: React.ComponentProps<(typeof fieldComponents)[T]>
116-
extra?: string
117-
pre_title?: string
118-
}
119-
120110
export const RenderField = ({ name, props, rules, type, extra }: FormFieldProps) => {
121111
const { t } = useTranslation()
122112
const Component = fieldComponents[type]
@@ -292,27 +282,6 @@ export const allComplaintFields = {
292282
}),
293283
} as const
294284

295-
export type ComplaintField = keyof typeof allComplaintFields
296-
297-
export interface ComplaintTitleData {
298-
complaintType: keyof typeof complaintTypeMappings
299-
eventDate?: dayjs.Dayjs
300-
eventHour?: dayjs.Dayjs
301-
reportdate?: dayjs.Dayjs
302-
reportTime?: dayjs.Dayjs
303-
lineNumberText?: string
304-
licenseNum?: string
305-
}
306-
307-
export interface ComplaintTypeMapping {
308-
subject: { applyType?: { dataText?: string | null } }
309-
title_order: ComplaintField[]
310-
}
311-
312-
export interface FieldConfig {
313-
pre_title?: string
314-
}
315-
316285
export const buildComplaintTitle = (data: ComplaintTitleData): string => {
317286
const {
318287
complaintType,

src/pages/components/map-related/MapLayers/ComplaintModalForms.tsx

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,4 @@
1-
import { RequestSubjectSchema } from '@hasadna/open-bus-api-client'
2-
import { ComplaintField } from './ComplaintModalFields'
3-
4-
export const complaintTypes = [
5-
'no_ride',
6-
'no_stop',
7-
'delay',
8-
'early',
9-
// only in debug
10-
'overcrowded',
11-
'add_or_remove_station',
12-
'add_new_line',
13-
'add_frequency',
14-
'driver_behavior', // request file upload
15-
'cleanliness',
16-
'fine_appeal',
17-
'route_change',
18-
'line_switch',
19-
'station_signs',
20-
'ticketing_fares_discounts',
21-
'other',
22-
] as const
23-
24-
export type ComplaintType = (typeof complaintTypes)[number]
25-
26-
export interface ComplaintTypeData {
27-
fields: ComplaintField[]
28-
subject: RequestSubjectSchema
29-
subject_code: number
30-
title_order: ComplaintField[]
31-
}
1+
import { ComplaintType, ComplaintTypeData } from './ComplaintTypes'
322

333
export const complaintTypeMappings: Record<ComplaintType, ComplaintTypeData> = {
344
no_ride: {
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import { GtfsRoutePydanticModel, RequestSubjectSchema } from '@hasadna/open-bus-api-client'
2+
import { Rule } from 'antd/es/form'
3+
import dayjs from 'dayjs'
4+
import { Point } from 'src/pages/timeBasedMap'
5+
import { allComplaintFields, fieldComponents } from './ComplaintModalFields'
6+
import { complaintTypeMappings } from './ComplaintModalForms'
7+
8+
export interface ComplaintUser {
9+
firstName: string
10+
lastName: string
11+
iDNum: string
12+
email: string
13+
mobile: string
14+
}
15+
16+
export interface ComplaintData {
17+
complaintType: ComplaintType
18+
applyContent: string
19+
busOperator?: number
20+
licenseNum?: string
21+
eventDate?: dayjs.Dayjs
22+
lineNumberText?: string
23+
eventHour?: dayjs.Dayjs
24+
direction?: number
25+
wait?: [dayjs.Dayjs, dayjs.Dayjs]
26+
raisingStation?: number
27+
raisingStationCity?: string
28+
destinationStationCity?: string
29+
reportdate?: dayjs.Dayjs
30+
reportTime?: dayjs.Dayjs
31+
busDirectionFrom?: string
32+
busDirectionTo?: string
33+
addOrRemoveStation?: '1' | '2'
34+
raisingStationAddress?: string
35+
firstDeclaration?: boolean
36+
secondDeclaration?: boolean
37+
ravKavNumber?: string
38+
addingFrequencyReason?: ('LoadTopics' | 'LongWaiting' | 'ExtensionHours')[]
39+
debug?: boolean
40+
}
41+
42+
export type ComplaintFormValues = ComplaintUser & ComplaintData
43+
44+
export interface ComplaintModalProps {
45+
modalOpen?: boolean
46+
setModalOpen?: (open: boolean) => void
47+
position: Point
48+
route: GtfsRoutePydanticModel
49+
}
50+
51+
export const complaintTypes = [
52+
'no_ride',
53+
'no_stop',
54+
'delay',
55+
'early',
56+
// only in debug
57+
'overcrowded',
58+
'add_or_remove_station',
59+
'add_new_line',
60+
'add_frequency',
61+
'driver_behavior', // request file upload
62+
'cleanliness',
63+
'fine_appeal',
64+
'route_change',
65+
'line_switch',
66+
'station_signs',
67+
'ticketing_fares_discounts',
68+
'other',
69+
] as const
70+
71+
export type ComplaintType = (typeof complaintTypes)[number]
72+
73+
export interface ComplaintTypeData {
74+
fields: ComplaintField[]
75+
subject: RequestSubjectSchema
76+
subject_code: number
77+
title_order: ComplaintField[]
78+
}
79+
80+
export type ComplaintField = keyof typeof allComplaintFields
81+
82+
export interface ComplaintTitleData {
83+
complaintType: keyof typeof complaintTypeMappings
84+
eventDate?: dayjs.Dayjs
85+
eventHour?: dayjs.Dayjs
86+
reportdate?: dayjs.Dayjs
87+
reportTime?: dayjs.Dayjs
88+
lineNumberText?: string
89+
licenseNum?: string
90+
}
91+
92+
export interface ComplaintTypeMapping {
93+
subject: { applyType?: { dataText?: string | null } }
94+
title_order: ComplaintField[]
95+
}
96+
97+
export interface FieldConfig {
98+
pre_title?: string
99+
}
100+
101+
export type FieldType = keyof typeof fieldComponents
102+
103+
export type FormFieldProps<T extends FieldType = FieldType> = {
104+
name: string
105+
type: T
106+
rules?: Rule[]
107+
props?: React.ComponentProps<(typeof fieldComponents)[T]>
108+
extra?: string
109+
pre_title?: string
110+
}

0 commit comments

Comments
 (0)