feat: role system
This commit is contained in:
@@ -16,6 +16,7 @@ import { toast } from "react-toastify";
|
||||
import {
|
||||
carrierStore,
|
||||
cityStore,
|
||||
authStore,
|
||||
mediaStore,
|
||||
languageStore,
|
||||
isMediaIdEmpty,
|
||||
@@ -34,6 +35,7 @@ export const CarrierEditPage = observer(() => {
|
||||
const { id } = useParams();
|
||||
const { getCarrier, setEditCarrierData, editCarrierData } = carrierStore;
|
||||
const { language } = languageStore;
|
||||
const canReadCities = authStore.canRead("cities");
|
||||
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [isLoadingData, setIsLoadingData] = useState(true);
|
||||
@@ -42,6 +44,7 @@ export const CarrierEditPage = observer(() => {
|
||||
const [isPreviewMediaOpen, setIsPreviewMediaOpen] = useState(false);
|
||||
const [mediaId, setMediaId] = useState("");
|
||||
const [isDeleteLogoModalOpen, setIsDeleteLogoModalOpen] = useState(false);
|
||||
const [initialCityName, setInitialCityName] = useState("");
|
||||
const [activeMenuType, setActiveMenuType] = useState<
|
||||
"thumbnail" | "watermark_lu" | "watermark_rd" | "image" | null
|
||||
>(null);
|
||||
@@ -54,9 +57,14 @@ export const CarrierEditPage = observer(() => {
|
||||
}
|
||||
setIsLoadingData(true);
|
||||
try {
|
||||
await cityStore.getCities("ru");
|
||||
await cityStore.getCities("en");
|
||||
await cityStore.getCities("zh");
|
||||
if (!authStore.me) {
|
||||
await authStore.getMeAction().catch(() => undefined);
|
||||
}
|
||||
if (authStore.canRead("cities")) {
|
||||
await cityStore.getCities("ru");
|
||||
} else {
|
||||
await authStore.fetchMeCities().catch(() => undefined);
|
||||
}
|
||||
const carrierData = await getCarrier(Number(id));
|
||||
|
||||
if (carrierData) {
|
||||
@@ -84,6 +92,7 @@ export const CarrierEditPage = observer(() => {
|
||||
carrierData.zh?.logo || "",
|
||||
"zh"
|
||||
);
|
||||
setInitialCityName(carrierData.ru?.city || "");
|
||||
}
|
||||
|
||||
await mediaStore.getMedia();
|
||||
@@ -132,6 +141,31 @@ export const CarrierEditPage = observer(() => {
|
||||
? null
|
||||
: (selectedMedia?.id ?? editCarrierData.logo);
|
||||
|
||||
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 =
|
||||
editCarrierData.city_id &&
|
||||
!baseCities.some((city) => city.id === editCarrierData.city_id)
|
||||
? [
|
||||
{
|
||||
id: editCarrierData.city_id,
|
||||
name: initialCityName || `Город ${editCarrierData.city_id}`,
|
||||
country: "",
|
||||
country_code: "",
|
||||
arms: "",
|
||||
},
|
||||
...baseCities,
|
||||
]
|
||||
: baseCities;
|
||||
|
||||
if (isLoadingData) {
|
||||
return (
|
||||
<Box
|
||||
@@ -181,7 +215,7 @@ export const CarrierEditPage = observer(() => {
|
||||
)
|
||||
}
|
||||
>
|
||||
{cityStore.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