diff --git a/ember-headless-table/src/-private/-type-tests/table-api.test.ts b/ember-headless-table/src/-private/-type-tests/table-api.test.ts new file mode 100644 index 00000000..e2705272 --- /dev/null +++ b/ember-headless-table/src/-private/-type-tests/table-api.test.ts @@ -0,0 +1,16 @@ +import { expectTypeOf } from 'expect-type'; + +import { ColumnReordering } from '../../plugins/column-reordering'; +import { ColumnResizing } from '../../plugins/column-resizing'; +import { DataSorting } from '../../plugins/data-sorting'; + +import type { Table } from '[public-types]'; + +// We're testing types, not behaviors +const x = 0 as unknown as Table<{ x: number }>; + +////////////////////////////// +// #pluginOf +expectTypeOf(x.pluginOf(DataSorting)).toEqualTypeOf(); +expectTypeOf(x.pluginOf(ColumnReordering)).toEqualTypeOf(); +expectTypeOf(x.pluginOf(ColumnResizing)).toEqualTypeOf(); diff --git a/ember-headless-table/src/-private/-type-tests/table-config.test.ts b/ember-headless-table/src/-private/-type-tests/table-config.test.ts index 7dc02932..f470a358 100644 --- a/ember-headless-table/src/-private/-type-tests/table-config.test.ts +++ b/ember-headless-table/src/-private/-type-tests/table-config.test.ts @@ -2,12 +2,13 @@ import { expectTypeOf } from 'expect-type'; import { BasePlugin } from '../../plugins/-private/base'; import { ColumnReordering } from '../../plugins/column-reordering'; -import { Plugins } from '../../plugins/-private/utils'; -import { DataSorting, SortItem } from '../../plugins/data-sorting'; import { ColumnResizing } from '../../plugins/column-resizing'; import { ColumnVisibility } from '../../plugins/column-visibility'; +import { DataSorting } from '../../plugins/data-sorting'; import { StickyColumns } from '../../plugins/sticky-columns'; +import type { Plugins } from '../../plugins/-private/utils'; +import type { SortItem } from '../../plugins/data-sorting'; import type { Plugin } from '[public-plugin-types]'; import type { TableConfig } from '[public-types]'; import type { Constructor } from '#private-types'; @@ -26,8 +27,10 @@ expectTypeOf< [Constructor, Constructor] >().toMatchTypeOf(); -class SomeClass { foo = 'bar' } -class LocalPlugin extends BasePlugin<{ Meta: { Table: SomeClass} }> { +class SomeClass { + foo = 'bar'; +} +class LocalPlugin extends BasePlugin<{ Meta: { Table: SomeClass } }> { name = 'local-plugin'; } @@ -51,8 +54,10 @@ expectTypeOf([StickyColumns]).toMatchTypeOf(); // The various ways to define plugins expectTypeOf([DataSorting, ColumnReordering]).toMatchTypeOf(); -const onSort = (_sorts: SortItem[]) => {}; +const onSort = (_sorts: SortItem[]) => { + /* intentionally empty */ +}; const sorts: SortItem[] = []; -expectTypeOf([DataSorting.with(() => ({ }))]).toMatchTypeOf(); -expectTypeOf([DataSorting.with(() => ({ onSort, sorts }))]).toMatchTypeOf(); +expectTypeOf([DataSorting.with(() => ({}))]).toMatchTypeOf(); +expectTypeOf([DataSorting.with(() => ({ onSort, sorts }))]).toMatchTypeOf(); diff --git a/ember-headless-table/src/-private/table.ts b/ember-headless-table/src/-private/table.ts index 061f5868..f4f7645d 100644 --- a/ember-headless-table/src/-private/table.ts +++ b/ember-headless-table/src/-private/table.ts @@ -178,7 +178,7 @@ export class Table extends Resource> { /** * Get the active plugin instance for the given plugin class */ - pluginOf(klass: Class): Instance | undefined { + pluginOf>(klass: Class): Instance | undefined { let result = this.plugins.find((plugin) => plugin instanceof klass); /** diff --git a/test-app/tests/plugins/queries/meta-test.ts b/test-app/tests/plugins/queries/meta-test.ts index aba0d774..46cef671 100644 --- a/test-app/tests/plugins/queries/meta-test.ts +++ b/test-app/tests/plugins/queries/meta-test.ts @@ -230,13 +230,23 @@ module('Plugins | Queries | meta', function (hooks) { }); module('withFeature', function () { - class FeatureProvidingPlugin extends BasePlugin { + class FeatureProvidingPlugin extends BasePlugin<{ + Meta: { + Table: TestTableMeta; + Column: TestColumnMeta; + }; + }> { static features = ['feature-a']; name = 'queries-feature-a-test-plugin'; meta = { column: TestColumnMeta, table: TestTableMeta }; } - class FeatureProvidingPlugin2 extends BasePlugin { + class FeatureProvidingPlugin2 extends BasePlugin<{ + Meta: { + Table: TestTableMeta; + Column: TestColumnMeta; + }; + }> { static features = ['feature-b']; name = 'queries-feature-b-test-plugin'; meta = { column: TestColumnMeta, table: TestTableMeta };