diff --git a/src/globals.css b/src/globals.css index 78723b1..855162d 100644 --- a/src/globals.css +++ b/src/globals.css @@ -1,2 +1,9 @@ @import './stylesheets/hidden-functionality.css'; @import './stylesheets/markdown-editor.css'; + +.limited-text { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} diff --git a/src/pages/city/create.tsx b/src/pages/city/create.tsx index 6c94212..09bdd63 100644 --- a/src/pages/city/create.tsx +++ b/src/pages/city/create.tsx @@ -52,7 +52,7 @@ export const CityCreate = () => { fullWidth InputLabelProps={{shrink: true}} type="text" - label={'Название *'} + label={'Название'} name="name" /> diff --git a/src/pages/media/show.tsx b/src/pages/media/show.tsx index 303bd32..c38338c 100644 --- a/src/pages/media/show.tsx +++ b/src/pages/media/show.tsx @@ -1,6 +1,7 @@ import {Stack, Typography} from '@mui/material' import {useShow} from '@refinedev/core' import {Show, TextFieldComponent as TextField} from '@refinedev/mui' + import {MEDIA_TYPES} from '../../lib/constants' export const MediaShow = () => { diff --git a/src/pages/route/create.tsx b/src/pages/route/create.tsx index ac0f56e..1dc99f9 100644 --- a/src/pages/route/create.tsx +++ b/src/pages/route/create.tsx @@ -1,4 +1,4 @@ -import {Box, TextField, FormControlLabel, Checkbox} from '@mui/material' +import {Box, TextField, FormControlLabel, Checkbox, Typography} from '@mui/material' import {Create} from '@refinedev/mui' import {useForm} from '@refinedev/react-hook-form' import {Controller} from 'react-hook-form' @@ -51,8 +51,13 @@ export const RouteCreate = () => { name="route_direction" // boolean control={control} defaultValue={false} - render={({field}: {field: any}) => field.onChange(e.target.checked)} />} label="Направление маршрута" />} + render={({field}: {field: any}) => field.onChange(e.target.checked)} />} />} /> + + + (Прямой / Обратный) + + { name="route_direction" // boolean control={control} defaultValue={false} - render={({field}: {field: any}) => field.onChange(e.target.checked)} />} label="Направление маршрута" />} + render={({field}: {field: any}) => field.onChange(e.target.checked)} />} />} /> + + + (Прямой / Обратный) + + { const fields = [ // {label: 'ID', data: 'id'}, - {label: 'ID перевозчика', data: 'carrier_id'}, + // {label: 'ID перевозчика', data: 'carrier_id'}, + {label: 'Перевозчик', data: 'carrier'}, {label: 'Номер маршрута', data: 'route_number'}, - {label: 'Путь', data: 'path'}, + {label: 'Путь', data: 'path'}, // # ] return ( @@ -31,7 +32,7 @@ export const RouteShow = () => { Направление маршрута - + diff --git a/src/pages/sight/edit.tsx b/src/pages/sight/edit.tsx index 0f618b2..c2a21c4 100644 --- a/src/pages/sight/edit.tsx +++ b/src/pages/sight/edit.tsx @@ -59,6 +59,7 @@ export const SightEdit = () => { label={'Долгота'} name="longitude" /> + { const fields = [ // {label: 'ID', data: 'id'}, {label: 'Название', data: 'name'}, - {label: 'Широта', data: 'latitude'}, - {label: 'Долгота', data: 'longitude'}, - {label: 'ID города', data: 'city_id'}, + // {label: 'Широта', data: 'latitude'}, # + // {label: 'Долгота', data: 'longitude'}, # + // {label: 'ID города', data: 'city_id'}, + {label: 'Город', data: 'city'}, ] return ( @@ -126,14 +127,23 @@ export const SightShow = () => { Загрузка статей... ) : linkedArticles.length > 0 ? ( linkedArticles.map((article) => ( - + {article.heading} - {article.body} - diff --git a/src/pages/station/show.tsx b/src/pages/station/show.tsx index 591d60c..f33d51e 100644 --- a/src/pages/station/show.tsx +++ b/src/pages/station/show.tsx @@ -13,6 +13,8 @@ type SightItem = { latitude: number longitude: number city_id: number + city: string + [key: string]: string | number } export const StationShow = () => { @@ -98,17 +100,18 @@ export const StationShow = () => { const fields = [ // {label: 'ID', data: 'id'}, {label: 'Название', data: 'name'}, - {label: 'Широта', data: 'latitude'}, - {label: 'Долгота', data: 'longitude'}, + // {label: 'Широта', data: 'latitude'}, # + // {label: 'Долгота', data: 'longitude'}, # {label: 'Описание', data: 'description'}, ] - const sightFields = [ - // {label: 'ID', data: 'id' as keyof SightItem}, - {label: 'Название', data: 'name' as keyof SightItem}, - {label: 'Широта', data: 'latitude' as keyof SightItem}, - {label: 'Долгота', data: 'longitude' as keyof SightItem}, - {label: 'ID города', data: 'city_id' as keyof SightItem}, + const sightFields: Array<{label: string; data: keyof SightItem}> = [ + // {label: 'ID', data: 'id'}, + {label: 'Название', data: 'name'}, + // {label: 'Широта', data: 'latitude'}, # + // {label: 'Долгота', data: 'longitude'}, # + // {label: 'ID города', data: 'city_id'}, + {label: 'Город', data: 'city'}, ] return ( @@ -125,41 +128,41 @@ export const StationShow = () => { - Привязанные виды + Привязанные достопримечательности {sightsLoading ? ( - Загрузка видов... + Загрузка достопримечательностей... ) : linkedSights.length > 0 ? ( linkedSights.map((sight, index) => ( - + {sightFields.map(({label, data}) => ( - {label}: {sight?.[data]} + {label}: {sight[data]} ))} - )) ) : ( - Виды не найдены + Достопримечательности не найдены )} - Привязать вид + Привязать достопримечательность - Вид - setSelectedSightId(Number(e.target.value))} label="Достопримечательность" fullWidth> {availableSights.map((sight) => ( {sight.name} diff --git a/src/pages/vehicle/create.tsx b/src/pages/vehicle/create.tsx index 567a7cb..7884dfb 100644 --- a/src/pages/vehicle/create.tsx +++ b/src/pages/vehicle/create.tsx @@ -1,4 +1,4 @@ -import {Autocomplete, Box, TextField, FormControl, InputLabel, Select, MenuItem, Typography} from '@mui/material' +import {Autocomplete, Box, TextField} from '@mui/material' import {Create, useAutocomplete} from '@refinedev/mui' import {useForm} from '@refinedev/react-hook-form' import {Controller} from 'react-hook-form' @@ -32,33 +32,34 @@ export const VehicleCreate = () => { fullWidth InputLabelProps={{shrink: true}} type="number" - label="Номер рейса" + label="Бортовой номер" name="tail_number" /> - - Выберите тип - - {errors.type && ( - - {!!(errors as any)?.message} - + ( + option.value === field.value) || null} + onChange={(_, value) => { + field.onChange(value?.value || null) + }} + getOptionLabel={(item) => { + return item ? item.label : '' + }} + isOptionEqualToValue={(option, value) => { + return option.value === value?.value + }} + renderInput={(params) => } + /> )} - + /> { const { saveButtonProps, register, control, formState: {errors}, - } = useForm({}) + } = useForm({}) const {autocompleteProps: cityAutocompleteProps} = useAutocomplete({ resource: 'city', @@ -31,33 +37,34 @@ export const VehicleEdit = () => { fullWidth InputLabelProps={{shrink: true}} type="number" - label="Номер рейса" + label="Бортовой номер" name="tail_number" /> - - Выберите тип - - {errors.type && ( - - {!!(errors as any)?.message} - + ( + option.value === field.value) || null} + onChange={(_, value) => { + field.onChange(value?.value || null) + }} + getOptionLabel={(item) => { + return item ? item.label : '' + }} + isOptionEqualToValue={(option, value) => { + return option.value === value?.value + }} + renderInput={(params) => } + /> )} - + /> { align: 'left', headerAlign: 'left', }, + { + field: 'city_id', + headerName: 'ID города', + type: 'string', + minWidth: 150, + display: 'flex', + align: 'left', + headerAlign: 'left', + }, { field: 'tail_number', - headerName: 'Номер рейса', + headerName: 'Бортовой номер', type: 'number', minWidth: 150, display: 'flex', @@ -42,15 +51,6 @@ export const VehicleList = () => { return VEHICLE_TYPES.find((type) => type.value === value)?.label || value }, }, - { - field: 'city_id', - headerName: 'ID города', - type: 'string', - minWidth: 150, - display: 'flex', - align: 'left', - headerAlign: 'left', - }, { field: 'city', headerName: 'Город', diff --git a/src/pages/vehicle/show.tsx b/src/pages/vehicle/show.tsx index 6d05a48..913c984 100644 --- a/src/pages/vehicle/show.tsx +++ b/src/pages/vehicle/show.tsx @@ -2,6 +2,8 @@ import {Stack, Typography} from '@mui/material' import {useShow} from '@refinedev/core' import {Show, TextFieldComponent as TextField} from '@refinedev/mui' +import {VEHICLE_TYPES} from '../../lib/constants' + export const VehicleShow = () => { const {query} = useShow({}) const {data, isLoading} = query @@ -10,20 +12,21 @@ export const VehicleShow = () => { const fields = [ // {label: 'ID', data: 'id'}, - {label: 'Номер рейса', data: 'tail_number'}, - {label: 'Тип', data: 'type'}, - {label: 'ID города', data: 'city_id'}, + {label: 'Бортовой номер', data: 'tail_number'}, + {label: 'Тип', data: 'type', render: (value: number) => VEHICLE_TYPES.find((type) => type.value === value)?.label || value}, + // {label: 'ID города', data: 'city_id'}, + {label: 'Город', data: 'city'}, ] return ( - {fields.map(({label, data}) => ( + {fields.map(({label, data, render}) => ( {label} - + ))}