feat: role system
This commit is contained in:
@@ -15,6 +15,7 @@ import {
|
||||
stationsStore,
|
||||
languageStore,
|
||||
cityStore,
|
||||
authStore,
|
||||
mediaStore,
|
||||
isMediaIdEmpty,
|
||||
LoadingSpinner,
|
||||
@@ -44,7 +45,8 @@ export const StationEditPage = observer(() => {
|
||||
editStation,
|
||||
setLanguageEditStationData,
|
||||
} = stationsStore;
|
||||
const { cities, getCities } = cityStore;
|
||||
const { getCities } = cityStore;
|
||||
const canReadCities = authStore.canRead("cities");
|
||||
const [coordinates, setCoordinates] = useState<string>("");
|
||||
const [isSelectMediaOpen, setIsSelectMediaOpen] = useState(false);
|
||||
const [isUploadMediaOpen, setIsUploadMediaOpen] = useState(false);
|
||||
@@ -138,9 +140,14 @@ export const StationEditPage = observer(() => {
|
||||
try {
|
||||
const stationId = Number(id);
|
||||
await getEditStation(stationId);
|
||||
await getCities("ru");
|
||||
await getCities("en");
|
||||
await getCities("zh");
|
||||
if (!authStore.me) {
|
||||
await authStore.getMeAction().catch(() => undefined);
|
||||
}
|
||||
if (authStore.canRead("cities")) {
|
||||
await getCities("ru");
|
||||
} else {
|
||||
await authStore.fetchMeCities().catch(() => undefined);
|
||||
}
|
||||
await mediaStore.getMedia();
|
||||
} finally {
|
||||
setIsLoadingData(false);
|
||||
@@ -150,6 +157,31 @@ export const StationEditPage = observer(() => {
|
||||
fetchAndSetStationData();
|
||||
}, [id]);
|
||||
|
||||
const baseCities = canReadCities
|
||||
? cityStore.cities["ru"].data
|
||||
: authStore.meCities["ru"].map((city) => ({
|
||||
id: city.city_id,
|
||||
name: city.name,
|
||||
country: "",
|
||||
country_code: "",
|
||||
arms: "",
|
||||
}));
|
||||
|
||||
const availableCities =
|
||||
editStationData.common.city_id &&
|
||||
!baseCities.some((city) => city.id === editStationData.common.city_id)
|
||||
? [
|
||||
{
|
||||
id: editStationData.common.city_id,
|
||||
name: editStationData.common.city || `Город ${editStationData.common.city_id}`,
|
||||
country: "",
|
||||
country_code: "",
|
||||
arms: "",
|
||||
},
|
||||
...baseCities,
|
||||
]
|
||||
: baseCities;
|
||||
|
||||
if (isLoadingData) {
|
||||
return (
|
||||
<Box
|
||||
@@ -255,7 +287,7 @@ export const StationEditPage = observer(() => {
|
||||
value={editStationData.common.city_id || ""}
|
||||
label="Город"
|
||||
onChange={(e) => {
|
||||
const selectedCity = cities["ru"].data.find(
|
||||
const selectedCity = availableCities.find(
|
||||
(city) => city.id === e.target.value
|
||||
);
|
||||
setEditCommonData({
|
||||
@@ -264,7 +296,7 @@ export const StationEditPage = observer(() => {
|
||||
});
|
||||
}}
|
||||
>
|
||||
{cities["ru"].data.map((city) => (
|
||||
{availableCities.map((city) => (
|
||||
<MenuItem key={city.id} value={city.id}>
|
||||
{city.name}
|
||||
</MenuItem>
|
||||
|
||||
Reference in New Issue
Block a user