From eb33b0ccd7e13e12f94e7f54a0cb2250d82389db Mon Sep 17 00:00:00 2001 From: anton62k Date: Mon, 23 Feb 2026 20:19:06 +0300 Subject: [PATCH] feat: pinned column --- .../__tests__/table-views-schema.spec.ts | 68 +++++++++++++++++++ src/validation-schemas/table-views-schema.ts | 1 + 2 files changed, 69 insertions(+) diff --git a/src/validation-schemas/__tests__/table-views-schema.spec.ts b/src/validation-schemas/__tests__/table-views-schema.spec.ts index f936fa4..76026ef 100644 --- a/src/validation-schemas/__tests__/table-views-schema.spec.ts +++ b/src/validation-schemas/__tests__/table-views-schema.spec.ts @@ -241,6 +241,74 @@ describe('table-views-schema', () => { expect(validator.validateTableViews.errors).not.toBeNull(); }); + it('validates column with pinned left', () => { + const data = { + version: 1, + defaultViewId: 'default', + views: [ + { + id: 'default', + name: 'Default', + columns: [{ field: 'id', pinned: 'left' }], + }, + ], + }; + + expect(validator.validateTableViews(data)).toBe(true); + expect(validator.validateTableViews.errors).toBeNull(); + }); + + it('validates column with pinned right', () => { + const data = { + version: 1, + defaultViewId: 'default', + views: [ + { + id: 'default', + name: 'Default', + columns: [{ field: 'id', pinned: 'right' }], + }, + ], + }; + + expect(validator.validateTableViews(data)).toBe(true); + expect(validator.validateTableViews.errors).toBeNull(); + }); + + it('validates column with width and pinned', () => { + const data = { + version: 1, + defaultViewId: 'default', + views: [ + { + id: 'default', + name: 'Default', + columns: [{ field: 'id', width: 150, pinned: 'left' }], + }, + ], + }; + + expect(validator.validateTableViews(data)).toBe(true); + expect(validator.validateTableViews.errors).toBeNull(); + }); + + it('rejects invalid pinned value', () => { + const data = { + version: 1, + defaultViewId: 'default', + views: [ + { + id: 'default', + name: 'Default', + columns: [{ field: 'id', pinned: 'center' }], + }, + ], + }; + + expect(validator.validateTableViews(data)).toBe(false); + expect(validator.validateTableViews.errors).not.toBeNull(); + }); + it('rejects column width less than minimum', () => { const data = { version: 1, diff --git a/src/validation-schemas/table-views-schema.ts b/src/validation-schemas/table-views-schema.ts index b106f68..d31b200 100644 --- a/src/validation-schemas/table-views-schema.ts +++ b/src/validation-schemas/table-views-schema.ts @@ -56,6 +56,7 @@ export const tableViewsSchema: Schema = { properties: { field: { type: 'string', minLength: 1 }, width: { type: 'number', minimum: 40 }, + pinned: { type: 'string', enum: ['left', 'right'] }, }, }, FilterGroup: {