| | | 1 | | namespace OzonOrdersWeb.WebServices.Transactions.Grid.Settings; |
| | | 2 | | |
| | | 3 | | /// <summary> |
| | | 4 | | /// Слой настроек грида транзакций поверх OrdersGrid: <c>viewPrefs</c> (тема, плотность, шрифт, одна/две строки) |
| | | 5 | | /// и вычисляемые столбцы — общие с OrdersGrid и пишутся в тот же ключ; раскладка колонок и группы — едины для |
| | | 6 | | /// всех типов транзакций: <c>tx.columnState</c>, <c>tx.columnStateTwoLine</c>, <c>tx.columnLayout</c>, |
| | | 7 | | /// раскладка таблицы предложений поставщиков — <c>tx.offersColumnState</c>. |
| | | 8 | | /// Клиент работает с обычными ключами OrdersGrid, сервер ремапит их при загрузке и сохранении. |
| | | 9 | | /// </summary> |
| | | 10 | | public static class TransactionGridSettingsMapper |
| | | 11 | | { |
| | 1 | 12 | | private static readonly string[] TransactionSharedKeys = { "columnState", "columnStateTwoLine", "columnLayout", "off |
| | | 13 | | |
| | | 14 | | /// <summary>Общие с OrdersGrid ключи: включённый там двухстрочный вид/тема действуют и на странице транзакций.</sum |
| | 1 | 15 | | private static readonly string[] SharedKeys = { "viewPrefs" }; |
| | | 16 | | |
| | | 17 | | /// <summary>Ключ хранения для клиентского ключа; null — ключ не сохраняется (lastView, presets).</summary> |
| | | 18 | | public static string? ToStorageKey(string clientKey, string slug) |
| | | 19 | | { |
| | 7 | 20 | | if (TransactionSharedKeys.Contains(clientKey, StringComparer.Ordinal)) |
| | | 21 | | { |
| | 3 | 22 | | return $"tx.{clientKey}"; |
| | | 23 | | } |
| | | 24 | | |
| | 4 | 25 | | if (SharedKeys.Contains(clientKey, StringComparer.Ordinal)) |
| | | 26 | | { |
| | 1 | 27 | | return clientKey; |
| | | 28 | | } |
| | | 29 | | |
| | | 30 | | // computedColumns/presets/lastView — общие с OrdersGrid и правятся только там. |
| | 3 | 31 | | return null; |
| | | 32 | | } |
| | | 33 | | |
| | | 34 | | /// <summary> |
| | | 35 | | /// Словарь для клиента: общие ключи транзакций → прежние ключи конкретного типа → базовые OrdersGrid. |
| | | 36 | | /// Раскладка OrdersGrid не наследуется, поскольку набор колонок другой. Прежние ключи читаются лишь как |
| | | 37 | | /// безопасный fallback до первого сохранения новой общей раскладки. |
| | | 38 | | /// </summary> |
| | | 39 | | public static Dictionary<string, string> BuildClientSettings(IReadOnlyDictionary<string, string> stored, string slug |
| | | 40 | | { |
| | 1 | 41 | | var result = new Dictionary<string, string>(StringComparer.Ordinal); |
| | | 42 | | |
| | 6 | 43 | | foreach (var key in new[] { "computedColumns" }.Concat(SharedKeys)) |
| | | 44 | | { |
| | 2 | 45 | | if (stored.TryGetValue(key, out var v)) |
| | | 46 | | { |
| | 2 | 47 | | result[key] = v; |
| | | 48 | | } |
| | | 49 | | } |
| | | 50 | | |
| | 10 | 51 | | foreach (var key in TransactionSharedKeys) |
| | | 52 | | { |
| | 4 | 53 | | if (stored.TryGetValue($"tx.{key}", out var v)) |
| | | 54 | | { |
| | 2 | 55 | | result[key] = v; |
| | | 56 | | } |
| | 2 | 57 | | else if (stored.TryGetValue($"tx.{key}.{slug}", out var legacyValue)) |
| | | 58 | | { |
| | 0 | 59 | | result[key] = legacyValue; |
| | | 60 | | } |
| | | 61 | | } |
| | | 62 | | |
| | 1 | 63 | | return result; |
| | | 64 | | } |
| | | 65 | | } |