Compare commits
2 Commits
db64beb3ee
...
a357994025
| Author | SHA1 | Date | |
|---|---|---|---|
| a357994025 | |||
| 7382a85082 |
@@ -1,62 +0,0 @@
|
||||
# Селектор городов
|
||||
|
||||
## Описание функциональности
|
||||
|
||||
Добавлена функциональность выбора города в админ-панели "Белые ночи":
|
||||
|
||||
### Основные возможности:
|
||||
|
||||
1. **Селектор городов в шапке приложения**
|
||||
|
||||
- Расположен рядом с именем пользователя в верхней части приложения
|
||||
- Показывает список всех доступных городов
|
||||
- Имеет иконку MapPin для лучшего UX
|
||||
|
||||
2. **Сохранение в localStorage**
|
||||
|
||||
- Выбранный город автоматически сохраняется в localStorage
|
||||
- При перезагрузке страницы выбранный город восстанавливается
|
||||
|
||||
3. **Автоматическое использование в формах**
|
||||
- При создании новой станции выбранный город автоматически подставляется
|
||||
- При создании нового перевозчика выбранный город автоматически подставляется
|
||||
- Пользователь может изменить город в форме при необходимости
|
||||
|
||||
### Технические детали:
|
||||
|
||||
#### Новые компоненты и сторы:
|
||||
|
||||
- `SelectedCityStore` - стор для управления выбранным городом
|
||||
- `CitySelector` - компонент селектора городов
|
||||
- `useSelectedCity` - хук для удобного доступа к выбранному городу
|
||||
|
||||
#### Интеграция:
|
||||
|
||||
- Селектор добавлен в `Layout` компонент
|
||||
- Интегрирован в `StationCreatePage` и `CarrierCreatePage`
|
||||
- Использует существующий `CityStore` для получения списка городов
|
||||
|
||||
#### Файлы, которые были изменены:
|
||||
|
||||
- `src/widgets/Layout/index.tsx` - добавлен CitySelector
|
||||
- `src/pages/Station/StationCreatePage/index.tsx` - автоматическая подстановка города
|
||||
- `src/pages/Carrier/CarrierCreatePage/index.tsx` - автоматическая подстановка города
|
||||
- `src/shared/store/index.ts` - добавлен экспорт SelectedCityStore
|
||||
- `src/widgets/index.ts` - добавлен экспорт CitySelector
|
||||
- `src/shared/index.tsx` - добавлен экспорт hooks
|
||||
|
||||
#### Новые файлы:
|
||||
|
||||
- `src/shared/store/SelectedCityStore/index.ts`
|
||||
- `src/widgets/CitySelector/index.tsx`
|
||||
- `src/shared/hooks/useSelectedCity.ts`
|
||||
- `src/shared/hooks/index.ts`
|
||||
|
||||
### Использование:
|
||||
|
||||
1. Пользователь выбирает город в селекторе в шапке приложения
|
||||
2. Выбранный город сохраняется в localStorage
|
||||
3. При создании новой станции или перевозчика выбранный город автоматически подставляется в форму
|
||||
4. Пользователь может изменить город в форме если нужно
|
||||
|
||||
Функциональность полностью интегрирована и готова к использованию.
|
||||
File diff suppressed because it is too large
Load Diff
@@ -67,7 +67,8 @@ export const StationCreatePage = observer(() => {
|
||||
// ОБНОВЛЕННАЯ ФУНКЦИЯ: Проверка и вызов окна или создания
|
||||
const handleCreate = async () => {
|
||||
const isCityMissing = !createStationData.common.city_id;
|
||||
const isNameMissing = !createStationData[language].name;
|
||||
// Проверяем названия на всех языках
|
||||
const isNameMissing = !createStationData.ru.name || !createStationData.en.name || !createStationData.zh.name;
|
||||
|
||||
if (isCityMissing || isNameMissing) {
|
||||
setIsSaveWarningOpen(true);
|
||||
|
||||
@@ -67,7 +67,8 @@ export const StationEditPage = observer(() => {
|
||||
// ОБНОВЛЕННАЯ ФУНКЦИЯ: Проверка и вызов окна или редактирования
|
||||
const handleEdit = async () => {
|
||||
const isCityMissing = !editStationData.common.city_id;
|
||||
const isNameMissing = !editStationData[language].name;
|
||||
// Проверяем названия на всех языках
|
||||
const isNameMissing = !editStationData.ru.name || !editStationData.en.name || !editStationData.zh.name;
|
||||
|
||||
if (isCityMissing || isNameMissing) {
|
||||
setIsSaveWarningOpen(true);
|
||||
|
||||
@@ -5,9 +5,10 @@ export const SaveWithoutCityAgree = ({ blocker }: { blocker: any }) => {
|
||||
<div className="fixed top-0 left-0 w-screen h-screen flex justify-center items-center z-10000 bg-black/30">
|
||||
<div className="bg-white p-4 w-140 rounded-lg flex flex-col gap-4 items-center">
|
||||
<p className="text-black w-140 text-center">
|
||||
Вы не указали город и/или не заполнили названия на всех языках.
|
||||
Вы не указали город и/или не заполнили названия на всех языках
|
||||
(русский, английский, китайский).
|
||||
<br />
|
||||
Сохранить достопримечательность без этой информации?
|
||||
Сохранить без этой информации?
|
||||
</p>
|
||||
<div className="flex gap-4 justify-center">
|
||||
<Button variant="contained" onClick={() => blocker.proceed()}>
|
||||
|
||||
@@ -119,7 +119,8 @@ export const CreateInformationTab = observer(
|
||||
|
||||
const handleSave = async () => {
|
||||
const isCityMissing = !sight.city_id;
|
||||
const isNameMissing = !sight[language].name;
|
||||
// Проверяем названия на всех языках
|
||||
const isNameMissing = !sight.ru.name || !sight.en.name || !sight.zh.name;
|
||||
|
||||
if (isCityMissing || isNameMissing) {
|
||||
setIsSaveWarningOpen(true);
|
||||
|
||||
@@ -128,7 +128,8 @@ export const InformationTab = observer(
|
||||
// ОБНОВЛЕННАЯ ФУНКЦИЯ: Проверка и вызов окна или сохранения
|
||||
const handleSave = async () => {
|
||||
const isCityMissing = !sight.common.city_id;
|
||||
const isNameMissing = !sight[language].name;
|
||||
// Проверяем названия на всех языках
|
||||
const isNameMissing = !sight.ru.name || !sight.en.name || !sight.zh.name;
|
||||
|
||||
if (isCityMissing || isNameMissing) {
|
||||
setIsSaveWarningOpen(true);
|
||||
|
||||
Reference in New Issue
Block a user