feat: took header out

This commit is contained in:
ivannoskov
2026-03-03 21:35:10 +03:00
parent 9b509df12f
commit ef903f1b23
3 changed files with 348 additions and 210 deletions

View File

@@ -1,12 +1,29 @@
import type { PlacementStatus, PlacementPostStatus, CostType, PlacementType, InviteLinkType } from "@/lib/types/api";
export type ColumnSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
export const COLUMN_SIZE_STYLES: Record<ColumnSize, string> = {
'xxs': 'minmax(28px, 0.25fr)',
'xs': 'minmax(36px, 0.35fr)',
'sm': 'minmax(50px, 0.5fr)',
'md': 'minmax(70px, 0.7fr)',
'lg': 'minmax(100px, 1fr)',
'xl': 'minmax(130px, 1.3fr)',
'2xl': 'minmax(160px, 1.6fr)',
};
export const getColumnStyle = (column: ColumnConfig): string => {
return COLUMN_SIZE_STYLES[column.size];
};
export interface ColumnConfig {
id: string;
label: string;
group: string;
editable: boolean;
partialEdit?: boolean;
width?: string;
size: ColumnSize;
sortable?: boolean;
required?: boolean;
}
@@ -21,51 +38,51 @@ export const COLUMN_GROUPS = [
] as const;
export const ALL_COLUMNS: ColumnConfig[] = [
// Basic - узкие колонки
{ id: "checkbox", label: "", group: "basic", editable: false, required: true, width: "32px" },
{ id: "number", label: "№", group: "basic", editable: false, required: true, width: "40px" },
{ id: "status_deal", label: "Статус сделки", group: "basic", editable: true, partialEdit: true, width: "minmax(120px, 1.2fr)" },
{ id: "status_post", label: "Статус поста", group: "basic", editable: true, partialEdit: true, width: "minmax(120px, 1.2fr)" },
// Basic
{ id: "checkbox", label: "", group: "basic", editable: false, required: true, size: "xxs", sortable: false },
{ id: "number", label: "№", group: "basic", editable: false, required: true, size: "xs", sortable: false },
{ id: "status_deal", label: "Статус сделки", group: "basic", editable: true, partialEdit: true, size: "lg", sortable: true },
{ id: "status_post", label: "Статус поста", group: "basic", editable: true, partialEdit: true, size: "lg", sortable: true },
// Content
{ id: "creative", label: "Креатив", group: "content", editable: true, width: "minmax(140px, 1.5fr)" },
{ id: "invite_link", label: "Ссылка", group: "content", editable: false, width: "minmax(80px, 0.8fr)" },
{ id: "post_link", label: "Пост", group: "content", editable: false, width: "minmax(50px, 0.5fr)" },
{ id: "creative", label: "Креатив", group: "content", editable: true, size: "xl", sortable: true },
{ id: "invite_link", label: "Ссылка", group: "content", editable: false, size: "sm", sortable: false },
{ id: "post_link", label: "Пост", group: "content", editable: false, size: "sm", sortable: false },
// Finance
{ id: "cost", label: "Стоимость", group: "finance", editable: true, partialEdit: true, width: "minmax(80px, 0.8fr)" },
{ id: "cost_before", label: "До торга", group: "finance", editable: true, width: "minmax(80px, 0.8fr)" },
{ id: "cost_format", label: "Форм. оплаты", group: "finance", editable: true, partialEdit: true, width: "minmax(80px, 0.8fr)" },
{ id: "placement_type", label: "Тип закупа", group: "finance", editable: true, width: "minmax(100px, 1fr)" },
{ id: "discount", label: "Скидка", group: "finance", editable: false, width: "minmax(50px, 0.5fr)" },
{ id: "payment_date", label: "Оплата", group: "finance", editable: true, width: "minmax(90px, 0.8fr)" },
{ id: "cost", label: "Стоимость", group: "finance", editable: true, partialEdit: true, size: "md", sortable: true },
{ id: "cost_before", label: "До торга", group: "finance", editable: true, size: "md", sortable: true },
{ id: "cost_format", label: "Форм. оплаты", group: "finance", editable: true, partialEdit: true, size: "sm", sortable: true },
{ id: "placement_type", label: "Тип закупа", group: "finance", editable: true, size: "lg", sortable: true },
{ id: "discount", label: "Скидка", group: "finance", editable: false, size: "sm", sortable: true },
{ id: "payment_date", label: "Оплата", group: "finance", editable: true, size: "md", sortable: true },
// Dates
{ id: "planned_date", label: "План. выход", group: "dates", editable: true, width: "minmax(90px, 0.8fr)" },
{ id: "actual_date", label: "Факт", group: "dates", editable: false, width: "minmax(90px, 0.8fr)" },
{ id: "format", label: "Формат", group: "dates", editable: true, width: "minmax(100px, 0.8fr)" },
{ id: "time_top", label: "В топе", group: "dates", editable: false, width: "minmax(60px, 0.5fr)" },
{ id: "time_in_feed", label: "В ленте", group: "dates", editable: false, width: "minmax(60px, 0.5fr)" },
{ id: "link_created", label: "Ссылка", group: "dates", editable: false, width: "minmax(80px, 0.7fr)" },
{ id: "post_deleted", label: "Удалён", group: "dates", editable: false, width: "minmax(80px, 0.7fr)" },
{ id: "planned_date", label: "План. выход", group: "dates", editable: true, size: "md", sortable: true },
{ id: "actual_date", label: "Факт", group: "dates", editable: false, size: "md", sortable: true },
{ id: "format", label: "Формат", group: "dates", editable: true, size: "md", sortable: true },
{ id: "time_top", label: "В топе", group: "dates", editable: false, size: "sm", sortable: true },
{ id: "time_in_feed", label: "В ленте", group: "dates", editable: false, size: "sm", sortable: true },
{ id: "link_created", label: "Ссылка", group: "dates", editable: false, size: "md", sortable: true },
{ id: "post_deleted", label: "Удалён", group: "dates", editable: false, size: "md", sortable: true },
// Metrics
{ id: "subscriptions", label: "Подписки", group: "metrics", editable: false, width: "minmax(70px, 0.6fr)" },
{ id: "views", label: "Просмотры", group: "metrics", editable: false, width: "minmax(70px, 0.6fr)" },
{ id: "subscriptions", label: "Подписки", group: "metrics", editable: false, size: "md", sortable: true },
{ id: "views", label: "Просмотры", group: "metrics", editable: false, size: "md", sortable: true },
// Calculated
{ id: "cpf", label: "CPF", group: "calculated", editable: false, width: "minmax(50px, 0.5fr)" },
{ id: "cpm", label: "CPM", group: "calculated", editable: true, partialEdit: true, width: "minmax(50px, 0.5fr)" },
{ id: "conversion_24h", label: "Конв. 24ч", group: "calculated", editable: false, width: "minmax(60px, 0.5fr)" },
{ id: "conversion_48h", label: "Конв. 48ч", group: "calculated", editable: false, width: "minmax(60px, 0.5fr)" },
{ id: "conversion_total", label: "Конв. общ.", group: "calculated", editable: false, width: "minmax(70px, 0.6fr)" },
{ id: "total_unsubs", label: "Отписки", group: "calculated", editable: false, width: "minmax(60px, 0.5fr)" },
{ id: "unsub_percent", label: "% отписок", group: "calculated", editable: false, width: "minmax(60px, 0.5fr)" },
{ id: "total_active", label: "Итого", group: "calculated", editable: false, width: "minmax(60px, 0.5fr)" },
{ id: "cpf", label: "CPF", group: "calculated", editable: false, size: "sm", sortable: true },
{ id: "cpm", label: "CPM", group: "calculated", editable: true, partialEdit: true, size: "sm", sortable: true },
{ id: "conversion_24h", label: "Конв. 24ч", group: "calculated", editable: false, size: "sm", sortable: true },
{ id: "conversion_48h", label: "Конв. 48ч", group: "calculated", editable: false, size: "sm", sortable: true },
{ id: "conversion_total", label: "Конв. общ.", group: "calculated", editable: false, size: "sm", sortable: true },
{ id: "total_unsubs", label: "Отписки", group: "calculated", editable: false, size: "sm", sortable: true },
{ id: "unsub_percent", label: "% отписок", group: "calculated", editable: false, size: "sm", sortable: true },
{ id: "total_active", label: "Итого", group: "calculated", editable: false, size: "sm", sortable: true },
// Technical
{ id: "invite_type", label: "Тип ссылки", group: "technical", editable: true, width: "minmax(100px, 1fr)" },
{ id: "comment", label: "Комментарий", group: "technical", editable: true, width: "minmax(150px, 2fr)" },
{ id: "invite_type", label: "Тип ссылки", group: "technical", editable: true, size: "md", sortable: true },
{ id: "comment", label: "Комментарий", group: "technical", editable: true, size: "2xl", sortable: true },
] as const;
// Default visible columns