improvement for the backend api
This commit is contained in:
@@ -60,11 +60,11 @@ export default function CreatePurchasePage() {
|
||||
target_channel_id: "",
|
||||
external_channel_id: "",
|
||||
creative_id: "",
|
||||
scheduled_date: "",
|
||||
placement_date: "",
|
||||
cost: "",
|
||||
comment: "",
|
||||
post_link: "",
|
||||
invite_link_type: "public" as "public" | "private",
|
||||
invite_link_type: "public" as "public" | "approval",
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
@@ -73,15 +73,24 @@ export default function CreatePurchasePage() {
|
||||
|
||||
const loadData = async () => {
|
||||
try {
|
||||
const [channelsRes, externalChannelsRes, creativesRes] =
|
||||
await Promise.all([
|
||||
channelsApi.list({ is_active: true }),
|
||||
externalChannelsApi.list(),
|
||||
const channelsRes = await channelsApi.list();
|
||||
setChannels(channelsRes.target_channels.filter((c) => c.is_active));
|
||||
|
||||
// Загружаем внешние каналы для первого доступного target channel
|
||||
if (channelsRes.target_channels.length > 0) {
|
||||
const firstTargetChannel = channelsRes.target_channels[0];
|
||||
const [externalChannelsRes, creativesRes] = await Promise.all([
|
||||
externalChannelsApi.list(firstTargetChannel.id),
|
||||
creativesApi.list(),
|
||||
]);
|
||||
setChannels(channelsRes.data);
|
||||
setExternalChannels(externalChannelsRes.data);
|
||||
setCreatives(creativesRes.data.filter((c) => !c.is_archived));
|
||||
setExternalChannels(externalChannelsRes.external_channels);
|
||||
setCreatives(
|
||||
creativesRes.creatives.filter((c) => c.status === "active")
|
||||
);
|
||||
} else {
|
||||
setCreatives([]);
|
||||
setExternalChannels([]);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Error loading data:", err);
|
||||
}
|
||||
@@ -116,7 +125,7 @@ export default function CreatePurchasePage() {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!formData.scheduled_date) {
|
||||
if (!formData.placement_date) {
|
||||
setError("Укажите дату размещения");
|
||||
return;
|
||||
}
|
||||
@@ -132,10 +141,10 @@ export default function CreatePurchasePage() {
|
||||
target_channel_id: formData.target_channel_id,
|
||||
external_channel_id: formData.external_channel_id,
|
||||
creative_id: formData.creative_id,
|
||||
scheduled_date: formData.scheduled_date,
|
||||
placement_date: formData.placement_date,
|
||||
cost: parseFloat(formData.cost),
|
||||
comment: formData.comment || undefined,
|
||||
post_link: formData.post_link || undefined,
|
||||
ad_post_url: formData.post_link || undefined,
|
||||
invite_link_type: formData.invite_link_type,
|
||||
});
|
||||
|
||||
@@ -247,7 +256,7 @@ export default function CreatePurchasePage() {
|
||||
target_channel_id: "",
|
||||
external_channel_id: "",
|
||||
creative_id: "",
|
||||
scheduled_date: "",
|
||||
placement_date: "",
|
||||
cost: "",
|
||||
comment: "",
|
||||
post_link: "",
|
||||
@@ -394,15 +403,15 @@ export default function CreatePurchasePage() {
|
||||
<CardContent className="space-y-4">
|
||||
<div className="grid gap-4 md:grid-cols-2">
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor="scheduled_date">Дата размещения *</Label>
|
||||
<Label htmlFor="placement_date">Дата размещения *</Label>
|
||||
<Input
|
||||
id="scheduled_date"
|
||||
type="date"
|
||||
value={formData.scheduled_date}
|
||||
id="placement_date"
|
||||
type="datetime-local"
|
||||
value={formData.placement_date}
|
||||
onChange={(e) =>
|
||||
setFormData({
|
||||
...formData,
|
||||
scheduled_date: e.target.value,
|
||||
placement_date: e.target.value,
|
||||
})
|
||||
}
|
||||
/>
|
||||
@@ -443,7 +452,7 @@ export default function CreatePurchasePage() {
|
||||
<Label>Тип пригласительной ссылки *</Label>
|
||||
<RadioGroup
|
||||
value={formData.invite_link_type}
|
||||
onValueChange={(value: "public" | "private") =>
|
||||
onValueChange={(value: "public" | "approval") =>
|
||||
setFormData({ ...formData, invite_link_type: value })
|
||||
}
|
||||
>
|
||||
@@ -454,8 +463,8 @@ export default function CreatePurchasePage() {
|
||||
</Label>
|
||||
</div>
|
||||
<div className="flex items-center space-x-2">
|
||||
<RadioGroupItem value="private" id="private" />
|
||||
<Label htmlFor="private" className="font-normal">
|
||||
<RadioGroupItem value="approval" id="approval" />
|
||||
<Label htmlFor="approval" className="font-normal">
|
||||
С одобрением (запрос на вступление через бота)
|
||||
</Label>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user