@triptyk/ember-yeti-table 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +1 -1
- package/README.md +9 -115
- package/declarations/components/yeti-table/body.d.ts +32 -0
- package/declarations/components/yeti-table/body.d.ts.map +1 -0
- package/declarations/components/yeti-table/header.d.ts +33 -0
- package/declarations/components/yeti-table/header.d.ts.map +1 -0
- package/declarations/components/yeti-table/pagination.d.ts +40 -0
- package/declarations/components/yeti-table/pagination.d.ts.map +1 -0
- package/declarations/components/yeti-table/table.d.ts +21 -0
- package/declarations/components/yeti-table/table.d.ts.map +1 -0
- package/declarations/components/yeti-table/tbody/row/cell.d.ts +44 -0
- package/declarations/components/yeti-table/tbody/row/cell.d.ts.map +1 -0
- package/declarations/components/yeti-table/tbody/row.d.ts +37 -0
- package/declarations/components/yeti-table/tbody/row.d.ts.map +1 -0
- package/declarations/components/yeti-table/tbody.d.ts +29 -0
- package/declarations/components/yeti-table/tbody.d.ts.map +1 -0
- package/declarations/components/yeti-table/tfoot/row/cell.d.ts +40 -0
- package/declarations/components/yeti-table/tfoot/row/cell.d.ts.map +1 -0
- package/declarations/components/yeti-table/tfoot/row.d.ts +37 -0
- package/declarations/components/yeti-table/tfoot/row.d.ts.map +1 -0
- package/declarations/components/yeti-table/tfoot.d.ts +27 -0
- package/declarations/components/yeti-table/tfoot.d.ts.map +1 -0
- package/declarations/components/yeti-table/thead/row/cell.d.ts +54 -0
- package/declarations/components/yeti-table/thead/row/cell.d.ts.map +1 -0
- package/declarations/components/yeti-table/thead/row/column.d.ts +69 -0
- package/declarations/components/yeti-table/thead/row/column.d.ts.map +1 -0
- package/declarations/components/yeti-table/thead/row.d.ts +55 -0
- package/declarations/components/yeti-table/thead/row.d.ts.map +1 -0
- package/declarations/components/yeti-table/thead.d.ts +34 -0
- package/declarations/components/yeti-table/thead.d.ts.map +1 -0
- package/declarations/components/yeti-table.d.ts +107 -0
- package/declarations/components/yeti-table.d.ts.map +1 -0
- package/declarations/index.d.ts +1 -0
- package/declarations/index.d.ts.map +1 -0
- package/declarations/template-registry.d.ts +1 -0
- package/declarations/template-registry.d.ts.map +1 -0
- package/declarations/themes/default-theme.d.ts +3 -27
- package/declarations/themes/default-theme.d.ts.map +1 -1
- package/declarations/types.d.ts +82 -0
- package/declarations/types.d.ts.map +1 -0
- package/declarations/utils/create-regex.d.ts +1 -1
- package/declarations/utils/create-regex.d.ts.map +1 -1
- package/declarations/utils/filtering-utils.d.ts +2 -4
- package/declarations/utils/filtering-utils.d.ts.map +1 -1
- package/declarations/utils/sorting-utils.d.ts +6 -15
- package/declarations/utils/sorting-utils.d.ts.map +1 -1
- package/dist/components/yeti-table/body.js +19 -14
- package/dist/components/yeti-table/body.js.map +1 -1
- package/dist/components/yeti-table/header.js +10 -10
- package/dist/components/yeti-table/header.js.map +1 -1
- package/dist/components/yeti-table/pagination.js +14 -44
- package/dist/components/yeti-table/pagination.js.map +1 -1
- package/dist/components/yeti-table/table.js +1 -23
- package/dist/components/yeti-table/table.js.map +1 -1
- package/dist/components/yeti-table/tbody/row/cell.js +12 -12
- package/dist/components/yeti-table/tbody/row/cell.js.map +1 -1
- package/dist/components/yeti-table/tbody/row.js +15 -21
- package/dist/components/yeti-table/tbody/row.js.map +1 -1
- package/dist/components/yeti-table/tbody.js +1 -0
- package/dist/components/yeti-table/tbody.js.map +1 -1
- package/dist/components/yeti-table/tfoot/row/cell.js +9 -9
- package/dist/components/yeti-table/tfoot/row/cell.js.map +1 -1
- package/dist/components/yeti-table/tfoot/row.js +11 -11
- package/dist/components/yeti-table/tfoot/row.js.map +1 -1
- package/dist/components/yeti-table/tfoot.js +1 -0
- package/dist/components/yeti-table/tfoot.js.map +1 -1
- package/dist/components/yeti-table/thead/row/cell.js +11 -8
- package/dist/components/yeti-table/thead/row/cell.js.map +1 -1
- package/dist/components/yeti-table/thead/row/column.js +27 -128
- package/dist/components/yeti-table/thead/row/column.js.map +1 -1
- package/dist/components/yeti-table/thead/row.js +15 -15
- package/dist/components/yeti-table/thead/row.js.map +1 -1
- package/dist/components/yeti-table/thead.js +3 -22
- package/dist/components/yeti-table/thead.js.map +1 -1
- package/dist/components/yeti-table.js +99 -303
- package/dist/components/yeti-table.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/template-registry.js +2 -0
- package/dist/template-registry.js.map +1 -0
- package/dist/themes/default-theme.js +3 -2
- package/dist/themes/default-theme.js.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/create-regex.js +6 -6
- package/dist/utils/create-regex.js.map +1 -1
- package/dist/utils/filtering-utils.js +20 -8
- package/dist/utils/filtering-utils.js.map +1 -1
- package/dist/utils/sorting-utils.js +13 -18
- package/dist/utils/sorting-utils.js.map +1 -1
- package/package.json +37 -16
- package/src/components/yeti-table/{body.gjs → body.gts} +49 -45
- package/src/components/yeti-table/header.gts +67 -0
- package/src/components/yeti-table/pagination.gts +118 -0
- package/src/components/yeti-table/table.gts +27 -0
- package/src/components/yeti-table/tbody/row/{cell.gjs → cell.gts} +38 -19
- package/src/components/yeti-table/tbody/row.gts +76 -0
- package/src/components/yeti-table/tbody.gts +53 -0
- package/src/components/yeti-table/tfoot/row/cell.gts +64 -0
- package/src/components/yeti-table/tfoot/row.gts +59 -0
- package/src/components/yeti-table/tfoot.gts +41 -0
- package/src/components/yeti-table/thead/row/{cell.gjs → cell.gts} +36 -13
- package/src/components/yeti-table/thead/row/column.gts +177 -0
- package/src/components/yeti-table/thead/row.gts +105 -0
- package/src/components/yeti-table/thead.gts +65 -0
- package/src/components/yeti-table.gts +629 -0
- package/src/template-registry.ts +10 -0
- package/src/themes/{default-theme.js → default-theme.ts} +5 -1
- package/src/types.ts +94 -0
- package/src/utils/{create-regex.js → create-regex.ts} +10 -10
- package/src/utils/filtering-utils.ts +91 -0
- package/src/utils/{sorting-utils.js → sorting-utils.ts} +35 -26
- package/dist/_app_/themes/default-theme.js +0 -1
- package/dist/_app_/utils/create-regex.js +0 -1
- package/dist/_app_/utils/filtering-utils.js +0 -1
- package/dist/_app_/utils/sorting-utils.js +0 -1
- package/src/components/yeti-table/header.gjs +0 -54
- package/src/components/yeti-table/pagination.gjs +0 -155
- package/src/components/yeti-table/table.gjs +0 -34
- package/src/components/yeti-table/tbody/row.gjs +0 -89
- package/src/components/yeti-table/tbody.gjs +0 -55
- package/src/components/yeti-table/tfoot/row/cell.gjs +0 -45
- package/src/components/yeti-table/tfoot/row.gjs +0 -44
- package/src/components/yeti-table/tfoot.gjs +0 -33
- package/src/components/yeti-table/thead/row/column.gjs +0 -260
- package/src/components/yeti-table/thead/row.gjs +0 -71
- package/src/components/yeti-table/thead.gjs +0 -45
- package/src/components/yeti-table.gjs +0 -780
- package/src/utils/filtering-utils.js +0 -75
- /package/src/{.gitkeep → index.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yeti-table.js","sources":["../../src/components/yeti-table.gjs"],"sourcesContent":["import { getOwner } from '@ember/application';\nimport { action, notifyPropertyChange } from '@ember/object';\nimport { later, schedule, scheduleOnce } from '@ember/runloop';\nimport { isEmpty, isPresent } from '@ember/utils';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport merge from 'deepmerge';\nimport { use } from 'ember-resources';\nimport { trackedFunction } from 'reactiveweb/function';\nimport { keepLatest } from 'reactiveweb/keep-latest';\nimport { dedupeTracked, localCopy } from 'tracked-toolbox';\nimport { cached } from '@glimmer/tracking';\n\nimport DEFAULT_THEME from '../themes/default-theme.js';\nimport filterData from '../utils/filtering-utils.js';\nimport {\n compareValues,\n mergeSort,\n sortMultiple,\n} from '../utils/sorting-utils.js';\nimport Helper from '@ember/component/helper';\n/**\n The primary Yeti Table component. This component represents the root of the\n table, and manages high level state of all of its subcomponents.\n\n ```hbs\n <YetiTable @data={{this.data}} as |table|>\n\n <table.header as |header|>\n <header.column @prop=\"firstName\">\n First name\n </header.column>\n <header.column @prop=\"lastName\">\n Last name\n </header.column>\n <header.column @prop=\"points\">\n Points\n </header.column>\n </table.header>\n\n <table.body/>\n\n </YetiTable>\n ```\n\n ```hbs\n <YetiTable @data={{this.data}} as |table|>\n\n <table.thead as |thead|>\n <thead.row as |row|>\n <row.column @prop=\"firstName\">\n First name\n </row.column>\n <row.column @prop=\"lastName\">\n Last name\n </row.column>\n <row.column @prop=\"points\">\n Points\n </row.column>\n </thead.row>\n </table.thead>\n\n <table.body/>\n\n </YetiTable>\n ```\n @class YetiTable\n @yield {object} table\n @yield {Component} table.header the table header component (Single row in header)\n @yield {Component} table.thead the table header component (Allows multiple rows in header)\n @yield {Component} table.body the table body component\n @yield {Component} table.tfoot the table footer component\n @yield {Component} table.pagination the pagination controls component\n @yield {object} table.actions an object that contains actions to interact with the table\n @yield {object} table.paginationData object that represents the current pagination state\n @yield {boolean} table.isLoading boolean that is `true` when data is being loaded\n @yield {array} table.columns the columns on the table\n @yield {array} table.visibleColumns the visible columns on the table\n @yield {array} table.rows an array of all the rows yeti table knows of. In the sync case, it will contain the entire dataset. In the async case, it will be the same as `table.visibleRows`\n @yield {number} table.totalRows the total number of rows on the table (regardless of pagination). Important argument in the async case to inform yeti table of the total number of rows in the dataset.\n @yield {array} table.visibleRows the rendered rows on the table account for pagination, filtering, etc; when pagination is false, it will be the same length as totalRows\n @yield {object} table.theme the theme being used\n */\n// template imports\nimport { hash } from '@ember/helper';\nimport Table from './yeti-table/table.gjs';\nimport Header from './yeti-table/header.gjs';\nimport THead from './yeti-table/thead.gjs';\nimport Body from './yeti-table/body.gjs';\nimport TBody from './yeti-table/tbody.gjs';\nimport TFoot from './yeti-table/tfoot.gjs';\nimport Pagination from './yeti-table/pagination.gjs';\n\n// bring ember-concurrency didCancel helper instead of\n// including the whole dependency\nconst TASK_CANCELATION_NAME = 'TaskCancelation';\nconst didCancel = function (e) {\n return e && e.name === TASK_CANCELATION_NAME;\n};\n\nconst getConfigWithDefault = function (key, defaultValue) {\n return function () {\n return this.config[key] ?? defaultValue;\n };\n};\n\n// we keep `totalRows` updated manually in xwaan untracked property\n// to allow the user to update it in a loadData call and avoid\n// a re-run of the main tracked function\nclass UpdateTotalRows extends Helper {\n compute(positional, { context }) {\n context.totalRows = positional[0];\n notifyPropertyChange(context, 'normalizedTotalRows');\n notifyPropertyChange(context, 'paginationData');\n return '';\n }\n}\n\n// we need some control of how we update the filter property, hence this modifier\n// in this case, any falsy value will be considered as en empty string, which will then\n// be deduped.\nclass UpdateFilter extends Helper {\n compute(positional, { context }) {\n context.filter = positional[0] || '';\n return '';\n }\n}\n\nclass ProcessedData extends Helper {\n compute(positional, { loadData, context }) {\n let data = context.latestData ?? [];\n\n if (!loadData) {\n context.processData(data);\n } else {\n // This is instrumental to ignoreDataChanges working\n context.processedData = data;\n }\n return '';\n }\n}\n\nexport default class YetiTable extends Component {\n <template>\n {{#let\n (hash\n table=(component Table theme=this.mergedTheme parent=this)\n header=(component\n Header\n columns=this.columns\n onColumnClick=this.onColumnSort\n sortable=this.sortable\n sortSequence=this.sortSequence\n parent=this\n theme=this.mergedTheme\n )\n thead=(component\n THead\n columns=this.columns\n onColumnClick=this.onColumnSort\n sortable=this.sortable\n sortSequence=this.sortSequence\n theme=this.mergedTheme\n parent=this\n )\n body=(component\n Body\n data=this.processedData\n columns=this.columns\n theme=this.mergedTheme\n parent=this\n )\n tbody=(component\n TBody\n data=this.processedData\n columns=this.columns\n theme=this.mergedTheme\n parent=this\n )\n tfoot=(component\n TFoot columns=this.columns theme=this.mergedTheme parent=this\n )\n pagination=(component\n Pagination\n disabled=this.isLoading\n theme=this.mergedTheme\n paginationData=this.paginationData\n paginationActions=(hash\n previousPage=this.previousPage\n nextPage=this.nextPage\n goToPage=this.goToPage\n changePageSize=this.changePageSize\n )\n )\n actions=this.publicApi\n paginationData=this.paginationData\n isLoading=this.resolvedData.isPending\n columns=this.columns\n visibleColumns=this.visibleColumns\n rows=this.normalizedRows\n totalRows=this.normalizedTotalRows\n visibleRows=this.processedData\n theme=this.mergedTheme\n )\n as |api|\n }}\n {{UpdateTotalRows @totalRows context=this}}\n {{UpdateFilter @filter context=this}}\n {{ProcessedData loadData=@loadData context=this}}\n\n {{#if this.renderTableElement}}\n <Table @theme={{this.mergedTheme}} @parent={{this}} ...attributes>\n {{yield api}}\n </Table>\n {{else}}\n {{yield api}}\n {{/if}}\n\n {{/let}}\n </template>\n /**\n * An object that contains classes for yeti table to apply when rendering its various table\n * html elements. The theme object your pass in will be deeply merged with yeti-table's default theme\n * and with a theme defined in your environment.js at `ENV['ember-yeti-table'].theme`.\n *\n * @argument theme\n * @type {Object}\n */\n\n /**\n * The data for Yeti Table to render. It can be an array or a promise that resolves with an array.\n * The only case when `@data` is optional is if a `@loadData` was passed in.\n * @argument data\n * @type {Array | Promise<Array>}\n */\n\n /**\n * The function that will be called when Yeti Table needs data. This argument is used\n * when you don't have all the data available or loading all rows at once isn't possible,\n * e.g the dataset is too large.\n *\n * By passing in a function to `@loadData` you assume the responsibility to filter, sort and\n * paginate the data (if said features are enabled).\n *\n * This function must return an array or a promise that resolves with an array.\n *\n * This function will be called with an argument with the current state of the table.\n * Use this object to know what data to fetch, pass it to the server, etc.\n * Please check the \"Async Data\" guide to understand what that object contains and\n * an example of its usage.\n *\n * @argument loadData\n * @type {Function}\n */\n\n publicApi = {\n previousPage: this.previousPage,\n nextPage: this.nextPage,\n goToPage: this.goToPage,\n changePageSize: this.changePageSize,\n reloadData: this.reloadData,\n };\n\n /**\n * This function will be called when Yeti Table initializes. It will be called with\n * an object argument containing the functions for the possible actions you can make\n * on a table. This object contains the following actions:\n * - previousPage\n * - nextPage\n * - goToPage\n * - changePageSize\n * - reloadData\n *\n * @argument registerApi\n * @type {Function}\n */\n\n /**\n * Use this argument to enable the pagination feature. Default is `false`.\n *\n * @argument pagination\n * @type {Boolean}\n */\n @localCopy('args.pagination', getConfigWithDefault('pagination', false))\n pagination;\n\n /**\n * Controls the size of each page. Default is `15`.\n *\n * @argument pageSize\n * @type {number}\n */\n @localCopy('args.pageSize', getConfigWithDefault('pageSize', 15))\n pageSize;\n\n /**\n * Controls the current page to show. Default is `1`.\n *\n * @argument pageNumber\n * @type {number}\n */\n @localCopy('args.pageNumber', 1)\n pageNumber;\n\n /**\n * Optional argument that informs yeti table of how many rows your data has.\n * Only needed when using a `@loadData` function and `@pagination={{true}}`.\n * When you use `@data`, Yeti Table uses the size of that array.\n * This information is used to calculate the pagination information that is yielded\n * and passed to the `@loadData` function.\n *\n * @argument totalRows\n * @type {number}\n */\n totalRows;\n\n // we keep `totalRows` updated manually in an untracked property\n // to allow the user to update it in a loadData call and avoid\n // a re-run of the main tracked function\n // @action\n // updateTotalRows(totalRows) {\n // this.totalRows = totalRows;\n // notifyPropertyChange(this, 'normalizedTotalRows');\n // notifyPropertyChange(this, 'paginationData');\n // }\n\n /**\n * The global filter. If passed in, Yeti Table will search all the rows that contain this\n * string and show them. Defaults to `''`.\n *\n * @argument filter\n * @type {String}\n */\n @dedupeTracked\n filter = '';\n\n // we need some control of how we update the filter property, hence this modifier\n // in this case, any falsy value will be considered as en empty string, which will then\n // be deduped.\n // @action\n // updateFilter(filter) {\n // this.filter = filter || '';\n // }\n\n /**\n * An optional function to customize the filtering logic. This function should return true\n * or false to either include or exclude the row on the resulting set. If this function depends\n * on a value, pass that value as the `@filterUsing` argument.\n *\n * This function will be called with two arguments:\n * - `row` - the current data row to use for filtering\n * - `filterUsing` - the value you passed in as `@filterUsing`\n *\n * @argument filterFunction\n * @type {Function}\n */\n\n /**\n * If you `@filterFunction` function depends on a different value (other that `@filter`)\n * to show, pass it in this argument. Yeti Table uses this argument to know when to recalculate\n * the fitlered rows.\n *\n * @argument filterUsing\n * @type {Object}\n */\n\n /**\n * Used to enable/disable sorting on all columns. You should use this to avoid passing\n * the @sortable argument to all columns. Defaults to `true`.\n *\n * @argument sortable\n * @type {Boolean}\n */\n @localCopy('args.sortable', getConfigWithDefault('sortable', true))\n sortable;\n\n /**\n * Use the `@sortFunction` if you want to completely customize how the row sorting is done.\n * It will be invoked with two rows, the current sortings that are applied and the `@compareFunction`.\n *\n * @argument sortFunction\n * @type {Function}\n */\n @localCopy('args.sortFunction', () => sortMultiple)\n sortFunction;\n\n /**\n * Use `@compareFunction` if you just want to customize how two values relate to each other (not the entire row).\n * It will be invoked with two values and you just need to return `-1`, `0` or `1` depending on if first value is\n * greater than the second or not. The default compare function used is the `compare` function from `@ember/utils`.\n *\n * @argument compareFunction\n * @type {Function}\n */\n @localCopy('args.compareFunction', () => compareValues)\n compareFunction;\n\n /**\n * Use `@sortSequence` to customize the sequence in which the sorting order will cycle when\n * clicking on the table headers. You can either pass in a comma-separated string or an array\n * of strings. Accepted values are `'asc'`, `'desc'` and `'unsorted'`. The default value is `['asc', 'desc']`.\n *\n * @argument sortSequence\n * @type {Array<string> | string}\n */\n @localCopy(\n 'args.sortSequence',\n getConfigWithDefault('sortSequence', ['asc', 'desc']),\n )\n sortSequence;\n\n /**\n * Use `@ignoreDataChanges` to prevent yeti table from observing changes to the underlying data and resorting or\n * refiltering. Useful when doing inline editing in a table.\n *\n * Defaults to `false`.\n *\n * This is an initial render only value. Changing it after the table has been rendered will not be respected.\n *\n * @argument ignoreDataChanges\n * @type {boolean}\n */\n @localCopy(\n 'args.ignoreDataChanges',\n getConfigWithDefault('ignoreDataChanges', false),\n )\n ignoreDataChanges;\n\n /**\n * Use `@renderTableElement` to prevent yeti table from rendering the topmost <table> element.\n * Might be useful for styling purposes (e.g if you want to place your pagination controls outside\n * of your table element). If you set this to `false`, you should render the table element yourself\n * using the yielded `<t.table>` component.\n *\n * Defaults to `true`.\n *\n * @argument renderTableElement\n * @type {boolean}\n */\n @localCopy('args.renderTableElement', true)\n renderTableElement;\n\n /**\n * The `@isColumnVisible` argument can be used to initialize the column visibility in a programmatic way.\n * For example, let's say you store the initial column visibility in local storage, then you can\n * use this function to initialize the `visible` column of the specific column. The given function should\n * return a boolean which will be assigned to the `visible` property of the column. An object representing\n * the column is passed in. Sou can use column.prop and column.name to know which column your computed\n * the visibility for.\n *\n * @argument isColumnVisible\n * @type {Function}\n */\n\n // If the theme is replaced, this will invalidate, but not if any prop under theme is changed\n @cached\n get mergedTheme() {\n let configTheme = this.config.theme || {};\n let localTheme = this.args.theme || {};\n return merge.all([DEFAULT_THEME, configTheme, localTheme]);\n }\n\n @cached\n get visibleColumns() {\n return this.columns.filter((c) => c.visible === true);\n }\n\n config =\n getOwner(this).resolveRegistration('config:environment')[\n 'ember-yeti-table'\n ] || {};\n\n get normalizedTotalRows() {\n if (!this.args.loadData) {\n // sync scenario using @data\n return this.processedDataRows?.length || 0;\n } else {\n // async scenario. @loadData is present.\n if (this.totalRows === undefined) {\n // @totalRows was not passed in. Use the latest returned data set length as a fallback\n return this.previousResolvedData.length || 0;\n } else {\n // @totalRows was passed in.\n return this.totalRows;\n }\n }\n }\n\n get normalizedRows() {\n if (!this.args.loadData) {\n // sync scenario using @data\n return this.processedDataRows;\n } else {\n // async scenario. @loadData is present.\n return this.processedData;\n }\n }\n\n get paginationData() {\n let pageSize = this.pageSize;\n let pageNumber = this.pageNumber;\n let totalRows = this.normalizedTotalRows;\n let isLastPage, totalPages;\n\n if (totalRows) {\n totalPages = Math.ceil(totalRows / pageSize);\n pageNumber = Math.min(pageNumber, totalPages);\n isLastPage = pageNumber === totalPages;\n }\n\n let isFirstPage = pageNumber === 1;\n let pageStart = (pageNumber - 1) * pageSize + 1;\n let pageEnd = pageStart + pageSize - 1;\n\n if (totalRows) {\n pageEnd = Math.min(pageEnd, totalRows);\n }\n\n return {\n pageSize,\n pageNumber,\n pageStart,\n pageEnd,\n isFirstPage,\n isLastPage,\n totalRows,\n totalPages,\n };\n }\n\n @tracked\n columns = [];\n\n constructor(owner, args) {\n super(...arguments);\n\n console.log(owner, args);\n\n if (typeof this.args.registerApi === 'function') {\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('actions', null, this.args.registerApi, this.publicApi);\n }\n }\n\n previousResolvedData = [];\n\n resolvedData = trackedFunction(this, async () => {\n let data = this.args.data;\n\n if (this.columns.length == 0) {\n return [];\n }\n\n // call loadData if exists\n if (typeof this.args.loadData === 'function') {\n let params = this.computeLoadDataParams();\n\n try {\n console.log(\"loadData\", params);\n\n data = await this.args.loadData(params);\n\n console.log(\"loadData end\");\n\n } catch (e) {\n console.log(e);\n\n if (!didCancel(e)) {\n // re-throw the non-cancellation error\n throw e;\n }\n }\n } else if (data?.then) {\n // resolve the data promise (either from the @loadData call or @data)\n data = await data;\n }\n\n if (this.isDestroyed) {\n return;\n }\n\n data = data || [];\n\n this.previousResolvedData = data;\n\n return data;\n });\n\n @use latestData = keepLatest({\n value: () => this.resolvedData.value ?? [],\n when: () => this.resolvedData.isPending,\n });\n\n @tracked\n processedData;\n\n @tracked\n processedDataRows;\n\n processData(data) {\n // only columns that have filterable = true and a prop defined will be considered\n let columns = this.columns.filter((c) => c.filterable && isPresent(c.prop));\n\n let sortableColumns = this.columns.filter((c) => !isEmpty(c.sort));\n let sortings = sortableColumns.map((c) => ({\n prop: c.prop,\n direction: c.sort,\n }));\n\n let filterFunction = this.args.filterFunction;\n let filterUsing = this.args.filterUsing;\n let filter = this.filter;\n\n let processTheData = () => {\n // filter the data\n data = filterData(data, columns, filter, filterFunction, filterUsing);\n // Sort the data\n if (sortings.length > 0) {\n data = mergeSort(data, (itemA, itemB) => {\n return this.sortFunction(\n itemA,\n itemB,\n sortings,\n this.compareFunction,\n );\n });\n }\n\n this.processedDataRows = data;\n\n // Paginate the Data\n if (this.pagination) {\n let { pageStart, pageEnd } = this.paginationData;\n data = data.slice(pageStart - 1, pageEnd); // slice excludes last element so we don't need to subtract 1\n }\n\n this.processedData = data;\n };\n\n if (this.ignoreDataChanges) {\n // eslint-disable-next-line ember/no-runloop\n later(processTheData, 0);\n } else {\n processTheData();\n }\n }\n\n computeLoadDataParams() {\n let params = {};\n\n if (this.pagination) {\n params.paginationData = this.paginationData;\n }\n\n params.sortData = this.columns\n .filter((c) => !isEmpty(c.sort))\n .map((c) => ({ prop: c.prop, direction: c.sort }));\n params.filterData = {\n filter: this.filter,\n filterUsing: this.args.filterUsing,\n columnFilters: this.columns.map((c) => ({\n prop: c.prop,\n filter: c.filter,\n filterUsing: c.filterUsing,\n })),\n };\n\n return params;\n }\n\n paginateData(data) {\n if (this.pagination) {\n let { pageStart, pageEnd } = this.paginationData;\n data = data.slice(pageStart - 1, pageEnd); // slice excludes last element so we don't need to subtract 1\n }\n\n return data;\n }\n\n @action\n async reloadData() {\n return await this.resolvedData.retry();\n }\n\n @action\n onColumnSort(column, e) {\n if (column.isSorted) {\n // if this column is already sorted, calculate the next\n // sorting on the sequence.\n let direction = column.sort;\n let sortSequence = column.normalizedSortSequence;\n direction =\n sortSequence[\n (sortSequence.indexOf(direction) + 1) % sortSequence.length\n ];\n\n if (direction === 'unsorted') {\n direction = null;\n }\n column.sort = direction;\n\n if (!e.shiftKey) {\n // if not pressed shift, reset other column sorting\n let columns = this.columns.filter((c) => c !== column);\n columns.forEach((c) => (c.sort = null));\n }\n } else {\n // use first direction from sort sequence\n let direction = column.normalizedSortSequence[0];\n // create new sorting\n column.sort = direction;\n\n // normal click replaces all sortings with the new one\n // shift click adds a new sorting to the existing ones\n if (!e.shiftKey) {\n // if not pressed shift, reset other column sortings\n let columns = this.columns.filter((c) => c !== column);\n columns.forEach((c) => (c.sort = null));\n }\n }\n }\n\n @action\n previousPage() {\n if (this.pagination) {\n this.pageNumber = Math.max(this.pageNumber - 1, 1);\n }\n }\n\n @action\n nextPage() {\n if (this.pagination) {\n let { isLastPage } = this.paginationData;\n\n if (!isLastPage) {\n this.pageNumber = this.pageNumber + 1;\n }\n }\n }\n\n @action\n goToPage(pageNumber) {\n if (this.pagination) {\n let { totalPages } = this.paginationData;\n pageNumber = Math.max(pageNumber, 1);\n\n if (totalPages) {\n pageNumber = Math.min(pageNumber, totalPages);\n }\n\n this.pageNumber = pageNumber;\n }\n }\n\n @action\n changePageSize(pageSize) {\n if (this.pagination) {\n this.pageSize = parseInt(pageSize);\n }\n }\n\n registerColumn(column) {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', this, function () {\n if (typeof this.args.isColumnVisible === 'function') {\n column.visible = this.args.isColumnVisible(column);\n }\n\n if (!this.columns.includes(column)) {\n this.columns = [...this.columns, column];\n }\n });\n }\n\n unregisterColumn(column) {\n if (this.columns.includes(column)) {\n this.columns = this.columns.filter((c) => c !== column);\n }\n }\n}\n"],"names":["TASK_CANCELATION_NAME","didCancel","e","name","getConfigWithDefault","key","defaultValue","config","UpdateTotalRows","Helper","compute","positional","context","totalRows","notifyPropertyChange","UpdateFilter","filter","ProcessedData","loadData","data","latestData","processData","processedData","YetiTable","Component","setComponentTemplate","precompileTemplate","strictMode","scope","hash","Table","Header","THead","Body","TBody","TFoot","Pagination","publicApi","previousPage","nextPage","goToPage","changePageSize","reloadData","g","prototype","localCopy","i","dedupeTracked","sortMultiple","compareValues","mergedTheme","configTheme","theme","localTheme","args","merge","all","DEFAULT_THEME","n","cached","visibleColumns","columns","c","visible","getOwner","resolveRegistration","normalizedTotalRows","processedDataRows","length","undefined","previousResolvedData","normalizedRows","paginationData","pageSize","pageNumber","isLastPage","totalPages","Math","ceil","min","isFirstPage","pageStart","pageEnd","tracked","constructor","owner","arguments","console","log","registerApi","scheduleOnce","resolvedData","trackedFunction","params","computeLoadDataParams","then","isDestroyed","use","keepLatest","value","when","isPending","filterable","isPresent","prop","sortableColumns","isEmpty","sort","sortings","map","direction","filterFunction","filterUsing","processTheData","filterData","mergeSort","itemA","itemB","sortFunction","compareFunction","pagination","slice","ignoreDataChanges","later","sortData","columnFilters","paginateData","retry","action","onColumnSort","column","isSorted","sortSequence","normalizedSortSequence","indexOf","shiftKey","forEach","max","parseInt","registerColumn","schedule","isColumnVisible","includes","unregisterColumn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yeti-table.js","sources":["../../src/components/yeti-table.gts"],"sourcesContent":["import { getOwner } from '@ember/application';\nimport { action, notifyPropertyChange } from '@ember/object';\nimport { later, schedule, scheduleOnce } from '@ember/runloop';\nimport { isEmpty, isPresent } from '@ember/utils';\nimport Component from '@glimmer/component';\nimport { cached, tracked } from '@glimmer/tracking';\nimport Helper from '@ember/component/helper';\nimport type Owner from '@ember/owner';\n\nimport merge from 'deepmerge';\nimport { use } from 'ember-resources';\nimport { trackedFunction } from 'reactiveweb/function';\nimport { keepLatest } from 'reactiveweb/keep-latest';\nimport { dedupeTracked, localCopy } from 'tracked-toolbox';\n\nimport { hash } from '@ember/helper';\n\nimport DEFAULT_THEME from '../themes/default-theme.ts';\nimport filterData from '../utils/filtering-utils.ts';\nimport {\n compareValues,\n mergeSort,\n sortMultiple,\n} from '../utils/sorting-utils.ts';\n\nimport Table from './yeti-table/table.gts';\nimport HeaderComponent from './yeti-table/header.gts';\nimport THead from './yeti-table/thead.gts';\nimport Body from './yeti-table/body.gts';\nimport TBody from './yeti-table/tbody.gts';\nimport TFoot from './yeti-table/tfoot.gts';\nimport Pagination from './yeti-table/pagination.gts';\nimport type Column from './yeti-table/thead/row/column.gts';\nimport type {\n LoadDataParams,\n PaginationData,\n Row,\n RowFilterFunction,\n SortDirection,\n Theme,\n} from '../types.ts';\nimport type { Comparator } from '../utils/sorting-utils.ts';\nimport type { WithBoundArgs } from '@glint/template';\n\nconst TASK_CANCELATION_NAME = 'TaskCancelation';\nconst didCancel = function (e: unknown): boolean {\n return !!e && (e as { name?: string }).name === TASK_CANCELATION_NAME;\n};\n\nfunction getConfigWithDefault<T>(key: string, defaultValue: T): () => T {\n return function (this: YetiTable): T {\n return (this.config[key] as T | undefined) ?? defaultValue;\n };\n}\n\ninterface HelperNamed {\n context: YetiTable;\n}\n\ninterface UpdateTotalRowsSignature {\n Args: { Positional: [number | undefined]; Named: HelperNamed };\n Return: '';\n}\n\nclass UpdateTotalRows extends Helper<UpdateTotalRowsSignature> {\n compute(positional: [number | undefined], { context }: HelperNamed): '' {\n context.totalRows = positional[0];\n notifyPropertyChange(context, 'normalizedTotalRows');\n notifyPropertyChange(context, 'paginationData');\n return '';\n }\n}\n\ninterface UpdateFilterSignature {\n Args: { Positional: [string | undefined]; Named: HelperNamed };\n Return: '';\n}\n\nclass UpdateFilter extends Helper<UpdateFilterSignature> {\n compute(positional: [string | undefined], { context }: HelperNamed): '' {\n context.filter = positional[0] || '';\n return '';\n }\n}\n\ninterface ProcessedDataSignature {\n Args: {\n Positional: [];\n Named: {\n loadData?: YetiTable['args']['loadData'];\n context: YetiTable;\n };\n };\n Return: '';\n}\n\nclass ProcessedData extends Helper<ProcessedDataSignature> {\n compute(\n _positional: [],\n {\n loadData,\n context,\n }: {\n loadData?: YetiTable['args']['loadData'];\n context: YetiTable;\n },\n ): '' {\n const data = context.latestData ?? [];\n\n if (!loadData) {\n context.processData(data);\n } else {\n context.processedData = data;\n }\n return '';\n }\n}\n\nexport type YetiTableLoadData = (\n params: LoadDataParams,\n) => Row[] | Promise<Row[]>;\n\nexport interface YetiTableSignature {\n Element: HTMLElement;\n Args: {\n data?: Row[] | Promise<Row[]>;\n loadData?: YetiTableLoadData;\n theme?: Partial<Theme>;\n pagination?: boolean;\n pageSize?: number;\n pageNumber?: number;\n totalRows?: number;\n filter?: string;\n filterFunction?: RowFilterFunction;\n filterUsing?: unknown;\n sortable?: boolean;\n sortFunction?: (\n itemA: Row,\n itemB: Row,\n sorts: { prop: string; direction: SortDirection }[],\n compareFn: Comparator,\n ) => number;\n compareFunction?: Comparator;\n sortSequence?: SortDirection[] | string;\n ignoreDataChanges?: boolean;\n renderTableElement?: boolean;\n isColumnVisible?: (column: Column) => boolean;\n registerApi?: (api: YetiTable['publicApi']) => void;\n };\n Blocks: {\n default: [\n {\n table: WithBoundArgs<typeof Table, 'theme' | 'parent'>;\n header: WithBoundArgs<\n typeof HeaderComponent,\n | 'columns'\n | 'onColumnClick'\n | 'sortable'\n | 'sortSequence'\n | 'parent'\n | 'theme'\n >;\n thead: WithBoundArgs<\n typeof THead,\n | 'columns'\n | 'onColumnClick'\n | 'sortable'\n | 'sortSequence'\n | 'theme'\n | 'parent'\n >;\n body: WithBoundArgs<typeof Body, 'data' | 'columns' | 'theme'>;\n tbody: WithBoundArgs<typeof TBody, 'data' | 'columns' | 'theme'>;\n tfoot: WithBoundArgs<typeof TFoot, 'columns' | 'theme' | 'parent'>;\n pagination: WithBoundArgs<\n typeof Pagination,\n 'disabled' | 'theme' | 'paginationData' | 'paginationActions'\n >;\n actions: YetiTable['publicApi'];\n paginationData: PaginationData;\n isLoading: boolean;\n columns: Column[];\n visibleColumns: Column[];\n rows: Row[] | undefined;\n totalRows: number;\n visibleRows: Row[] | undefined;\n theme: Theme;\n },\n ];\n };\n}\n\nexport default class YetiTable extends Component<YetiTableSignature> {\n publicApi = {\n previousPage: () => this.previousPage(),\n nextPage: () => this.nextPage(),\n goToPage: (n: number) => this.goToPage(n),\n changePageSize: (n: number | string) => this.changePageSize(n),\n reloadData: () => this.reloadData(),\n };\n\n @localCopy('args.pagination', getConfigWithDefault('pagination', false))\n pagination!: boolean;\n\n @localCopy('args.pageSize', getConfigWithDefault('pageSize', 15))\n pageSize!: number;\n\n @localCopy('args.pageNumber', 1)\n pageNumber!: number;\n\n totalRows: number | undefined;\n\n @dedupeTracked\n filter = '';\n\n @localCopy('args.sortable', getConfigWithDefault('sortable', true))\n sortable!: boolean;\n\n @localCopy('args.sortFunction', () => sortMultiple)\n sortFunction!: YetiTableSignature['Args']['sortFunction'];\n\n @localCopy('args.compareFunction', () => compareValues)\n compareFunction!: Comparator;\n\n @localCopy(\n 'args.sortSequence',\n getConfigWithDefault('sortSequence', ['asc', 'desc']),\n )\n sortSequence!: SortDirection[] | string;\n\n @localCopy(\n 'args.ignoreDataChanges',\n getConfigWithDefault('ignoreDataChanges', false),\n )\n ignoreDataChanges!: boolean;\n\n @localCopy('args.renderTableElement', true)\n renderTableElement!: boolean;\n\n @cached\n get mergedTheme(): Theme {\n const configTheme = (this.config.theme as Partial<Theme>) || {};\n const localTheme = this.args.theme || {};\n return merge.all([DEFAULT_THEME, configTheme, localTheme]) as Theme;\n }\n\n @cached\n get visibleColumns(): Column[] {\n return this.columns.filter((c) => c.visible === true);\n }\n\n config: Record<string, unknown> =\n (\n (\n getOwner(this) as {\n resolveRegistration?: (name: string) => unknown;\n } | null\n )?.resolveRegistration?.('config:environment') as\n | Record<string, Record<string, unknown>>\n | undefined\n )?.['ember-yeti-table'] || {};\n\n get normalizedTotalRows(): number {\n if (!this.args.loadData) {\n return this.processedDataRows?.length || 0;\n } else {\n if (this.totalRows === undefined) {\n return this.previousResolvedData.length || 0;\n } else {\n return this.totalRows;\n }\n }\n }\n\n get normalizedRows(): Row[] | undefined {\n if (!this.args.loadData) {\n return this.processedDataRows;\n } else {\n return this.processedData;\n }\n }\n\n get paginationData(): PaginationData {\n const pageSize = this.pageSize;\n let pageNumber = this.pageNumber;\n const totalRows = this.normalizedTotalRows;\n let isLastPage: boolean | undefined;\n let totalPages: number | undefined;\n\n if (totalRows) {\n totalPages = Math.ceil(totalRows / pageSize);\n pageNumber = Math.min(pageNumber, totalPages);\n isLastPage = pageNumber === totalPages;\n }\n\n const isFirstPage = pageNumber === 1;\n const pageStart = (pageNumber - 1) * pageSize + 1;\n let pageEnd = pageStart + pageSize - 1;\n\n if (totalRows) {\n pageEnd = Math.min(pageEnd, totalRows);\n }\n\n return {\n pageSize,\n pageNumber,\n pageStart,\n pageEnd,\n isFirstPage,\n isLastPage,\n totalRows,\n totalPages,\n };\n }\n\n @tracked\n columns: Column[] = [];\n\n previousResolvedData: Row[] = [];\n\n @tracked\n processedData: Row[] | undefined;\n\n @tracked\n processedDataRows: Row[] | undefined;\n\n resolvedData = trackedFunction(this, async () => {\n let data: Row[] | Promise<Row[]> | undefined = this.args.data;\n\n if (this.columns.length == 0) {\n return [] as Row[];\n }\n\n if (typeof this.args.loadData === 'function') {\n const params = this.computeLoadDataParams();\n\n try {\n data = await this.args.loadData(params);\n } catch (e) {\n console.log(e);\n\n if (!didCancel(e)) {\n throw e;\n }\n }\n } else if (data && typeof (data as Promise<Row[]>).then === 'function') {\n data = await data;\n }\n\n if (this.isDestroyed) {\n return;\n }\n\n const resolved = (data as Row[] | undefined) || [];\n\n this.previousResolvedData = resolved;\n\n return resolved;\n });\n\n @use latestData = keepLatest({\n value: () => this.resolvedData.value ?? [],\n when: () => this.resolvedData.isPending,\n });\n\n constructor(owner: Owner, args: YetiTableSignature['Args']) {\n super(owner, args);\n\n if (typeof this.args.registerApi === 'function') {\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('actions', null, this.args.registerApi, this.publicApi);\n }\n }\n\n processData(data: Row[]): void {\n const columns = this.columns.filter(\n (c) => c.filterable && isPresent(c.prop),\n );\n\n const sortableColumns = this.columns.filter((c) => !isEmpty(c.sort));\n const sortings = sortableColumns.map((c) => ({\n prop: c.prop as string,\n direction: c.sort as SortDirection,\n }));\n\n const filterFunction = this.args.filterFunction;\n const filterUsing = this.args.filterUsing;\n const filter = this.filter;\n\n const processTheData = (): void => {\n let working = filterData(\n data,\n columns,\n filter,\n filterFunction,\n filterUsing,\n );\n\n if (sortings.length > 0) {\n working = mergeSort(working, (itemA, itemB) => {\n return this.sortFunction!(\n itemA,\n itemB,\n sortings,\n this.compareFunction,\n );\n });\n }\n\n this.processedDataRows = working;\n\n if (this.pagination) {\n const { pageStart, pageEnd } = this.paginationData;\n working = working.slice(pageStart - 1, pageEnd);\n }\n\n this.processedData = working;\n };\n\n if (this.ignoreDataChanges) {\n // eslint-disable-next-line ember/no-runloop\n later(processTheData, 0);\n } else {\n processTheData();\n }\n }\n\n computeLoadDataParams(): LoadDataParams {\n const params: LoadDataParams = {\n sortData: this.columns\n .filter((c) => !isEmpty(c.sort))\n .map((c) => ({ prop: c.prop, direction: c.sort })),\n filterData: {\n filter: this.filter,\n filterUsing: this.args.filterUsing,\n columnFilters: this.columns.map((c) => ({\n prop: c.prop,\n filter: c.filter,\n filterUsing: c.filterUsing,\n })),\n },\n };\n\n if (this.pagination) {\n params.paginationData = this.paginationData;\n }\n\n return params;\n }\n\n paginateData(data: Row[]): Row[] {\n if (this.pagination) {\n const { pageStart, pageEnd } = this.paginationData;\n data = data.slice(pageStart - 1, pageEnd);\n }\n\n return data;\n }\n\n @action\n async reloadData(): Promise<unknown> {\n return await this.resolvedData.retry();\n }\n\n @action\n onColumnSort(column: Column, e: MouseEvent): void {\n if (column.isSorted) {\n let direction: SortDirection | null | undefined = column.sort;\n const sortSequence = column.normalizedSortSequence;\n direction = sortSequence[\n (sortSequence.indexOf(direction as string) + 1) % sortSequence.length\n ] as SortDirection;\n\n if ((direction as unknown as string) === 'unsorted') {\n direction = null;\n }\n column.sort = direction;\n\n if (!e.shiftKey) {\n const columns = this.columns.filter((c) => c !== column);\n columns.forEach((c) => (c.sort = null));\n }\n } else {\n const direction = column.normalizedSortSequence[0] as SortDirection;\n column.sort = direction;\n\n if (!e.shiftKey) {\n const columns = this.columns.filter((c) => c !== column);\n columns.forEach((c) => (c.sort = null));\n }\n }\n }\n\n @action\n previousPage(): void {\n if (this.pagination) {\n this.pageNumber = Math.max(this.pageNumber - 1, 1);\n }\n }\n\n @action\n nextPage(): void {\n if (this.pagination) {\n const { isLastPage } = this.paginationData;\n\n if (!isLastPage) {\n this.pageNumber = this.pageNumber + 1;\n }\n }\n }\n\n @action\n goToPage(pageNumber: number): void {\n if (this.pagination) {\n const { totalPages } = this.paginationData;\n pageNumber = Math.max(pageNumber, 1);\n\n if (totalPages) {\n pageNumber = Math.min(pageNumber, totalPages);\n }\n\n this.pageNumber = pageNumber;\n }\n }\n\n @action\n changePageSize(pageSize: number | string): void {\n if (this.pagination) {\n this.pageSize = parseInt(String(pageSize));\n }\n }\n\n registerColumn(column: Column): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', this, function (this: YetiTable) {\n if (typeof this.args.isColumnVisible === 'function') {\n column.visible = this.args.isColumnVisible(column);\n }\n\n if (!this.columns.includes(column)) {\n this.columns = [...this.columns, column];\n }\n });\n }\n\n unregisterColumn(column: Column): void {\n if (this.columns.includes(column)) {\n this.columns = this.columns.filter((c) => c !== column);\n }\n }\n\n <template>\n {{#let\n (hash\n table=(component Table theme=this.mergedTheme parent=this)\n header=(component\n HeaderComponent\n columns=this.columns\n onColumnClick=this.onColumnSort\n sortable=this.sortable\n sortSequence=this.sortSequence\n parent=this\n theme=this.mergedTheme\n )\n thead=(component\n THead\n columns=this.columns\n onColumnClick=this.onColumnSort\n sortable=this.sortable\n sortSequence=this.sortSequence\n theme=this.mergedTheme\n parent=this\n )\n body=(component\n Body\n data=this.processedData\n columns=this.columns\n theme=this.mergedTheme\n parent=this\n )\n tbody=(component\n TBody\n data=this.processedData\n columns=this.columns\n theme=this.mergedTheme\n parent=this\n )\n tfoot=(component\n TFoot columns=this.columns theme=this.mergedTheme parent=this\n )\n pagination=(component\n Pagination\n disabled=this.resolvedData.isPending\n theme=this.mergedTheme\n paginationData=this.paginationData\n paginationActions=(hash\n previousPage=this.previousPage\n nextPage=this.nextPage\n goToPage=this.goToPage\n changePageSize=this.changePageSize\n )\n )\n actions=this.publicApi\n paginationData=this.paginationData\n isLoading=this.resolvedData.isPending\n columns=this.columns\n visibleColumns=this.visibleColumns\n rows=this.normalizedRows\n totalRows=this.normalizedTotalRows\n visibleRows=this.processedData\n theme=this.mergedTheme\n )\n as |api|\n }}\n {{UpdateTotalRows @totalRows context=this}}\n {{UpdateFilter @filter context=this}}\n {{ProcessedData loadData=@loadData context=this}}\n\n {{#if this.renderTableElement}}\n <Table @theme={{this.mergedTheme}} @parent={{this}} ...attributes>\n {{yield api}}\n </Table>\n {{else}}\n {{yield api}}\n {{/if}}\n\n {{/let}}\n </template>\n}\n"],"names":["TASK_CANCELATION_NAME","didCancel","e","name","getConfigWithDefault","key","defaultValue","config","UpdateTotalRows","Helper","compute","positional","context","totalRows","notifyPropertyChange","UpdateFilter","filter","ProcessedData","_positional","loadData","data","latestData","processData","processedData","YetiTable","Component","publicApi","previousPage","nextPage","goToPage","n","changePageSize","reloadData","g","prototype","localCopy","i","dedupeTracked","sortMultiple","compareValues","mergedTheme","configTheme","theme","localTheme","args","merge","all","DEFAULT_THEME","cached","visibleColumns","columns","c","visible","getOwner","resolveRegistration","normalizedTotalRows","processedDataRows","length","undefined","previousResolvedData","normalizedRows","paginationData","pageSize","pageNumber","isLastPage","totalPages","Math","ceil","min","isFirstPage","pageStart","pageEnd","tracked","resolvedData","trackedFunction","params","computeLoadDataParams","console","log","then","isDestroyed","resolved","use","keepLatest","value","when","isPending","constructor","owner","registerApi","scheduleOnce","filterable","isPresent","prop","sortableColumns","isEmpty","sort","sortings","map","direction","filterFunction","filterUsing","processTheData","working","filterData","mergeSort","itemA","itemB","sortFunction","compareFunction","pagination","slice","ignoreDataChanges","later","sortData","columnFilters","paginateData","retry","action","onColumnSort","column","isSorted","sortSequence","normalizedSortSequence","indexOf","shiftKey","forEach","max","parseInt","String","registerColumn","schedule","isColumnVisible","includes","unregisterColumn","setComponentTemplate","precompileTemplate","strictMode","scope","hash","Table","HeaderComponent","THead","Body","TBody","TFoot","Pagination"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-registry.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// BEGIN-SNIPPET default-theme.js
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
const defaultTheme = {
|
|
3
4
|
// applied to the <table> element
|
|
4
5
|
table: 'yeti-table',
|
|
5
6
|
// applied to any <tr>, wether it is from the header, body or footer
|
|
@@ -47,5 +48,5 @@ var DEFAULT_THEME = {
|
|
|
47
48
|
};
|
|
48
49
|
// END-SNIPPET
|
|
49
50
|
|
|
50
|
-
export {
|
|
51
|
+
export { defaultTheme as default };
|
|
51
52
|
//# sourceMappingURL=default-theme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-theme.js","sources":["../../src/themes/default-theme.
|
|
1
|
+
{"version":3,"file":"default-theme.js","sources":["../../src/themes/default-theme.ts"],"sourcesContent":["// BEGIN-SNIPPET default-theme.js\nimport type { Theme } from '../types.ts';\n\nconst defaultTheme: Theme = {\n // applied to the <table> element\n table: 'yeti-table',\n // applied to any <tr>, wether it is from the header, body or footer\n row: '',\n\n // applied to the <thead> element\n thead: '',\n // applied to <tr> rows inside the <thead> element\n theadRow: '',\n // applied to <th> cells inside the <thead> element\n theadCell: '',\n\n // applied to the <tbody> element\n tbody: '',\n // applied to <tr> rows inside the <tbody> element\n tbodyRow: '',\n // applied to <td> cells inside the <thead> element\n tbodyCell: '',\n\n // applied to the <tfoot> element\n tfoot: '',\n // applied to <tr> rows inside the <tfoot> element\n tfootRow: '',\n // applied to <td> cells inside the <tfoot> element\n tfootCell: '',\n\n sorting: {\n // applied to <th> header cells when column is sortable\n columnSortable: 'yeti-table-sortable',\n // applied to <th> header cells when column is currently sorted\n columnSorted: 'yeti-table-sorted',\n // applied to <th> header cells when column is currently sorted ascending\n columnSortedAsc: 'yeti-table-sorted-asc',\n // applied to <th> header cells when column is currently sorted descending\n columnSortedDesc: 'yeti-table-sorted-desc',\n },\n\n pagination: {\n // applied to the pagination controls container\n controls: 'yeti-table-pagination-controls',\n // applied to the pagination information element\n info: 'yeti-table-pagination-controls-page-info',\n // applied to the pageSize select element\n pageSize: 'yeti-table-pagination-controls-page-size',\n // applied to the next button\n next: 'yeti-table-pagination-controls-next',\n // applied to the previous button\n previous: 'yeti-table-pagination-controls-previous',\n },\n};\n\nexport default defaultTheme;\n// END-SNIPPET\n"],"names":["defaultTheme","table","row","thead","theadRow","theadCell","tbody","tbodyRow","tbodyCell","tfoot","tfootRow","tfootCell","sorting","columnSortable","columnSorted","columnSortedAsc","columnSortedDesc","pagination","controls","info","pageSize","next","previous"],"mappings":"AAAA;;AAGA,MAAMA,YAAmB,GAAG;AAC1B;AACAC,EAAAA,KAAK,EAAE,YAAY;AACnB;AACAC,EAAAA,GAAG,EAAE,EAAE;AAEP;AACAC,EAAAA,KAAK,EAAE,EAAE;AACT;AACAC,EAAAA,QAAQ,EAAE,EAAE;AACZ;AACAC,EAAAA,SAAS,EAAE,EAAE;AAEb;AACAC,EAAAA,KAAK,EAAE,EAAE;AACT;AACAC,EAAAA,QAAQ,EAAE,EAAE;AACZ;AACAC,EAAAA,SAAS,EAAE,EAAE;AAEb;AACAC,EAAAA,KAAK,EAAE,EAAE;AACT;AACAC,EAAAA,QAAQ,EAAE,EAAE;AACZ;AACAC,EAAAA,SAAS,EAAE,EAAE;AAEbC,EAAAA,OAAO,EAAE;AACP;AACAC,IAAAA,cAAc,EAAE,qBAAqB;AACrC;AACAC,IAAAA,YAAY,EAAE,mBAAmB;AACjC;AACAC,IAAAA,eAAe,EAAE,uBAAuB;AACxC;AACAC,IAAAA,gBAAgB,EAAE;GACnB;AAEDC,EAAAA,UAAU,EAAE;AACV;AACAC,IAAAA,QAAQ,EAAE,gCAAgC;AAC1C;AACAC,IAAAA,IAAI,EAAE,0CAA0C;AAChD;AACAC,IAAAA,QAAQ,EAAE,0CAA0C;AACpD;AACAC,IAAAA,IAAI,EAAE,qCAAqC;AAC3C;AACAC,IAAAA,QAAQ,EAAE;AACZ;AACF;AAGA;;;;"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -8,7 +8,7 @@ function createRegex(search, regex = false, smart = true, caseInsensitive = true
|
|
|
8
8
|
if (isBlank(search)) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
let normalized = regex ? search : escapeRegex(search);
|
|
12
12
|
if (smart) {
|
|
13
13
|
/* For smart filtering we want to allow the search to work regardless of
|
|
14
14
|
* word order. We also want double quoted text to be preserved, so word
|
|
@@ -17,17 +17,17 @@ function createRegex(search, regex = false, smart = true, caseInsensitive = true
|
|
|
17
17
|
*
|
|
18
18
|
* ^(?=.*?\bone\b)(?=.*?\btwo three\b)(?=.*?\bfour\b).*$
|
|
19
19
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
const words = normalized.match(/"[^"]+"|[^ ]+/g) || [''];
|
|
21
|
+
const a = words.map(word => {
|
|
22
22
|
if (word.charAt(0) === '"') {
|
|
23
|
-
|
|
23
|
+
const m = word.match(/^"(.*)"$/);
|
|
24
24
|
word = m ? m[1] : word;
|
|
25
25
|
}
|
|
26
26
|
return word.replace('"', '');
|
|
27
27
|
});
|
|
28
|
-
|
|
28
|
+
normalized = `^(?=.*?${a.join(')(?=.*?')}).*$`;
|
|
29
29
|
}
|
|
30
|
-
return new RegExp(
|
|
30
|
+
return new RegExp(normalized, caseInsensitive ? 'i' : '');
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
export { createRegex as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-regex.js","sources":["../../src/utils/create-regex.
|
|
1
|
+
{"version":3,"file":"create-regex.js","sources":["../../src/utils/create-regex.ts"],"sourcesContent":["import { isBlank } from '@ember/utils';\n\nconst ESCAPE_REGEX = new RegExp(\n '(\\\\' +\n [\n '/',\n '.',\n '*',\n '+',\n '?',\n '|',\n '(',\n ')',\n '[',\n ']',\n '{',\n '}',\n '\\\\',\n '$',\n '^',\n '-',\n ].join('|\\\\') +\n ')',\n 'g',\n);\n\nfunction escapeRegex(val: string): string {\n return val.replace(ESCAPE_REGEX, '\\\\$1');\n}\n\nexport default function createRegex(\n search: string | null | undefined,\n regex = false,\n smart = true,\n caseInsensitive = true,\n): RegExp | undefined {\n if (isBlank(search)) {\n return;\n }\n\n let normalized = regex ? (search as string) : escapeRegex(search as string);\n\n if (smart) {\n /* For smart filtering we want to allow the search to work regardless of\n * word order. We also want double quoted text to be preserved, so word\n * order is important - a la google. So this is what we want to\n * generate:\n *\n * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n */\n const words = normalized.match(/\"[^\"]+\"|[^ ]+/g) || [''];\n const a = words.map((word) => {\n if (word.charAt(0) === '\"') {\n const m = word.match(/^\"(.*)\"$/);\n word = m ? (m[1] as string) : word;\n }\n\n return word.replace('\"', '');\n });\n\n normalized = `^(?=.*?${a.join(')(?=.*?')}).*$`;\n }\n\n return new RegExp(normalized, caseInsensitive ? 'i' : '');\n}\n"],"names":["ESCAPE_REGEX","RegExp","join","escapeRegex","val","replace","createRegex","search","regex","smart","caseInsensitive","isBlank","normalized","words","match","a","map","word","charAt","m"],"mappings":";;AAEA,MAAMA,YAAY,GAAG,IAAIC,MAAM,CAC7B,KAAK,GACH,CACE,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,IAAI,EACJ,GAAG,EACH,GAAG,EACH,GAAG,CACJ,CAACC,IAAI,CAAC,KAAK,CAAC,GACb,GAAG,EACL,GACF,CAAC;AAED,SAASC,WAAWA,CAACC,GAAW,EAAU;AACxC,EAAA,OAAOA,GAAG,CAACC,OAAO,CAACL,YAAY,EAAE,MAAM,CAAC;AAC1C;AAEe,SAASM,WAAWA,CACjCC,MAAiC,EACjCC,KAAK,GAAG,KAAK,EACbC,KAAK,GAAG,IAAI,EACZC,eAAe,GAAG,IAAI,EACF;AACpB,EAAA,IAAIC,OAAO,CAACJ,MAAM,CAAC,EAAE;AACnB,IAAA;AACF,EAAA;EAEA,IAAIK,UAAU,GAAGJ,KAAK,GAAID,MAAM,GAAcJ,WAAW,CAACI,MAAgB,CAAC;AAE3E,EAAA,IAAIE,KAAK,EAAE;AACT;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,MAAMI,KAAK,GAAGD,UAAU,CAACE,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AACxD,IAAA,MAAMC,CAAC,GAAGF,KAAK,CAACG,GAAG,CAAEC,IAAI,IAAK;MAC5B,IAAIA,IAAI,CAACC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC1B,QAAA,MAAMC,CAAC,GAAGF,IAAI,CAACH,KAAK,CAAC,UAAU,CAAC;QAChCG,IAAI,GAAGE,CAAC,GAAIA,CAAC,CAAC,CAAC,CAAC,GAAcF,IAAI;AACpC,MAAA;AAEA,MAAA,OAAOA,IAAI,CAACZ,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAC9B,IAAA,CAAC,CAAC;IAEFO,UAAU,GAAG,UAAUG,CAAC,CAACb,IAAI,CAAC,SAAS,CAAC,CAAA,IAAA,CAAM;AAChD,EAAA;EAEA,OAAO,IAAID,MAAM,CAACW,UAAU,EAAEF,eAAe,GAAG,GAAG,GAAG,EAAE,CAAC;AAC3D;;;;"}
|
|
@@ -2,17 +2,29 @@ import { isEmpty } from '@ember/utils';
|
|
|
2
2
|
import { get } from '@ember/object';
|
|
3
3
|
import createRegex from './create-regex.js';
|
|
4
4
|
|
|
5
|
+
function safeString(value) {
|
|
6
|
+
if (value == null) return '';
|
|
7
|
+
if (typeof value === 'string') return value;
|
|
8
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
9
|
+
return String(value);
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
return JSON.stringify(value);
|
|
13
|
+
} catch {
|
|
14
|
+
return '';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
5
17
|
function createColumnFilters(columns) {
|
|
6
|
-
|
|
18
|
+
const searcheableColumns = columns.filter(c => {
|
|
7
19
|
return !isEmpty(c.filter) || !isEmpty(c.filterFunction);
|
|
8
20
|
});
|
|
9
21
|
return searcheableColumns.map(c => {
|
|
10
|
-
|
|
22
|
+
const regex = createRegex(c.filter);
|
|
11
23
|
return row => {
|
|
12
|
-
|
|
24
|
+
const value = c.prop ? get(row, c.prop) : undefined;
|
|
13
25
|
let passesRegex = true;
|
|
14
26
|
if (!isEmpty(c.filter)) {
|
|
15
|
-
passesRegex = regex.test(value);
|
|
27
|
+
passesRegex = regex ? regex.test(safeString(value)) : true;
|
|
16
28
|
}
|
|
17
29
|
let passesCustom = true;
|
|
18
30
|
if (!isEmpty(c.filterFunction)) {
|
|
@@ -30,20 +42,20 @@ function filterData(data, columns, globalFilter, filterFunction, filterUsing) {
|
|
|
30
42
|
// bail out if there are no columns to filter
|
|
31
43
|
return data;
|
|
32
44
|
}
|
|
33
|
-
|
|
34
|
-
|
|
45
|
+
const globalRegex = createRegex(globalFilter, false, true, true);
|
|
46
|
+
const columnFilters = createColumnFilters(columns);
|
|
35
47
|
return data.filter(row => {
|
|
36
48
|
let passesGeneral = true;
|
|
37
49
|
if (!isEmpty(globalRegex)) {
|
|
38
50
|
passesGeneral = columns.some(c => {
|
|
39
|
-
return globalRegex.test(get(row, c.prop));
|
|
51
|
+
return c.prop ? globalRegex.test(safeString(get(row, c.prop))) : false;
|
|
40
52
|
});
|
|
41
53
|
}
|
|
42
54
|
let passesColumn = true;
|
|
43
55
|
if (!isEmpty(columnFilters)) {
|
|
44
56
|
passesColumn = columnFilters.every(fn => fn(row));
|
|
45
57
|
}
|
|
46
|
-
|
|
58
|
+
const passesCustom = true;
|
|
47
59
|
if (!isEmpty(filterFunction)) {
|
|
48
60
|
passesColumn = filterFunction(row, filterUsing);
|
|
49
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filtering-utils.js","sources":["../../src/utils/filtering-utils.
|
|
1
|
+
{"version":3,"file":"filtering-utils.js","sources":["../../src/utils/filtering-utils.ts"],"sourcesContent":["import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\nimport createRegex from './create-regex.ts';\nimport type { ColumnDefinition, Row, RowFilterFunction } from '../types.ts';\n\nfunction safeString(value: unknown): string {\n if (value == null) return '';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return '';\n }\n}\n\nfunction createColumnFilters(\n columns: ColumnDefinition[],\n): Array<(row: Row) => boolean> {\n const searcheableColumns = columns.filter((c) => {\n return !isEmpty(c.filter) || !isEmpty(c.filterFunction);\n });\n\n return searcheableColumns.map((c) => {\n const regex = createRegex(c.filter);\n\n return (row: Row) => {\n const value = c.prop ? get(row, c.prop) : undefined;\n let passesRegex = true;\n\n if (!isEmpty(c.filter)) {\n passesRegex = regex ? regex.test(safeString(value)) : true;\n }\n\n let passesCustom = true;\n\n if (!isEmpty(c.filterFunction)) {\n passesCustom = c.filterFunction!(value, c.filterUsing);\n }\n\n return passesRegex && passesCustom;\n };\n });\n}\n\nexport default function filterData(\n data: Row[],\n columns: ColumnDefinition[],\n globalFilter?: string,\n filterFunction?: RowFilterFunction,\n filterUsing?: unknown,\n): Row[] {\n if (isEmpty(data)) {\n return [];\n }\n\n if (isEmpty(columns)) {\n // bail out if there are no columns to filter\n return data;\n }\n\n const globalRegex = createRegex(globalFilter, false, true, true);\n\n const columnFilters = createColumnFilters(columns);\n\n return data.filter((row) => {\n let passesGeneral = true;\n\n if (!isEmpty(globalRegex)) {\n passesGeneral = columns.some((c) => {\n return c.prop ? globalRegex!.test(safeString(get(row, c.prop))) : false;\n });\n }\n\n let passesColumn = true;\n\n if (!isEmpty(columnFilters)) {\n passesColumn = columnFilters.every((fn) => fn(row));\n }\n\n const passesCustom = true;\n if (!isEmpty(filterFunction)) {\n passesColumn = filterFunction!(row, filterUsing);\n }\n\n return passesGeneral && passesColumn && passesCustom;\n });\n}\n"],"names":["safeString","value","String","JSON","stringify","createColumnFilters","columns","searcheableColumns","filter","c","isEmpty","filterFunction","map","regex","createRegex","row","prop","get","undefined","passesRegex","test","passesCustom","filterUsing","filterData","data","globalFilter","globalRegex","columnFilters","passesGeneral","some","passesColumn","every","fn"],"mappings":"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"}
|
|
@@ -2,11 +2,11 @@ import { get } from '@ember/object';
|
|
|
2
2
|
import { compare, isNone } from '@ember/utils';
|
|
3
3
|
|
|
4
4
|
function merge(left, right, comparator) {
|
|
5
|
-
|
|
5
|
+
const mergedArray = [];
|
|
6
6
|
let leftIndex = 0;
|
|
7
7
|
let rightIndex = 0;
|
|
8
8
|
while (leftIndex < left.length && rightIndex < right.length) {
|
|
9
|
-
|
|
9
|
+
const comparison = comparator(left[leftIndex], right[rightIndex]);
|
|
10
10
|
if (comparison <= 0) {
|
|
11
11
|
mergedArray.push(left[leftIndex]);
|
|
12
12
|
leftIndex++;
|
|
@@ -31,30 +31,25 @@ function merge(left, right, comparator) {
|
|
|
31
31
|
* a general comparator. The built in sort function and Ember's sort functions
|
|
32
32
|
* are not stable, and `_.sortBy` doesn't take a general comparator. Ideally
|
|
33
33
|
* lodash would add a `_.sort` function whose API would mimic this function's.
|
|
34
|
-
*
|
|
35
|
-
* @function
|
|
36
|
-
* @param {Array} array The array to be sorted
|
|
37
|
-
* @param {Comparator} comparator The comparator function to compare elements with.
|
|
38
|
-
* @return {Array} A sorted array
|
|
39
34
|
*/
|
|
40
35
|
function mergeSort(array, comparator = compare) {
|
|
41
36
|
if (array.length <= 1) {
|
|
42
37
|
return array;
|
|
43
38
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
const middleIndex = Math.floor(array.length / 2);
|
|
40
|
+
const leftArray = mergeSort(array.slice(0, middleIndex), comparator);
|
|
41
|
+
const rightArray = mergeSort(array.slice(middleIndex), comparator);
|
|
47
42
|
return merge(leftArray, rightArray, comparator);
|
|
48
43
|
}
|
|
49
|
-
function sortMultiple(itemA, itemB, sorts,
|
|
50
|
-
let compareValue;
|
|
51
|
-
for (
|
|
44
|
+
function sortMultiple(itemA, itemB, sorts, compareFn) {
|
|
45
|
+
let compareValue = 0;
|
|
46
|
+
for (const {
|
|
52
47
|
prop,
|
|
53
48
|
direction
|
|
54
49
|
} of sorts) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
compareValue = direction === 'asc' ?
|
|
50
|
+
const valueA = get(itemA, prop);
|
|
51
|
+
const valueB = get(itemB, prop);
|
|
52
|
+
compareValue = direction === 'asc' ? compareFn(valueA, valueB) : -compareFn(valueA, valueB);
|
|
58
53
|
if (compareValue !== 0) {
|
|
59
54
|
break;
|
|
60
55
|
}
|
|
@@ -68,8 +63,8 @@ function isEmpty(value) {
|
|
|
68
63
|
return isNone(value) || isExactlyNaN(value);
|
|
69
64
|
}
|
|
70
65
|
function orderEmptyValues(itemA, itemB) {
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
const aIsEmpty = isEmpty(itemA);
|
|
67
|
+
const bIsEmpty = isEmpty(itemB);
|
|
73
68
|
if (aIsEmpty && !bIsEmpty) {
|
|
74
69
|
return -1;
|
|
75
70
|
} else if (bIsEmpty && !aIsEmpty) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sorting-utils.js","sources":["../../src/utils/sorting-utils.
|
|
1
|
+
{"version":3,"file":"sorting-utils.js","sources":["../../src/utils/sorting-utils.ts"],"sourcesContent":["import { get } from '@ember/object';\nimport { compare, isNone } from '@ember/utils';\n\nimport type { Sort } from '../types.ts';\n\nexport type Comparator<T = unknown> = (a: T, b: T) => number;\n\nfunction merge<T>(left: T[], right: T[], comparator: Comparator<T>): T[] {\n const mergedArray: T[] = [];\n let leftIndex = 0;\n let rightIndex = 0;\n\n while (leftIndex < left.length && rightIndex < right.length) {\n const comparison = comparator(left[leftIndex]!, right[rightIndex]!);\n\n if (comparison <= 0) {\n mergedArray.push(left[leftIndex]!);\n leftIndex++;\n } else {\n mergedArray.push(right[rightIndex]!);\n rightIndex++;\n }\n }\n\n if (leftIndex < left.length) {\n mergedArray.splice(mergedArray.length, 0, ...left.slice(leftIndex));\n }\n\n if (rightIndex < right.length) {\n mergedArray.splice(mergedArray.length, 0, ...right.slice(rightIndex));\n }\n\n return mergedArray;\n}\n\n/**\n * An implementation of the standard merge sort algorithm.\n *\n * This is necessary because we need a stable sorting algorithm that accepts\n * a general comparator. The built in sort function and Ember's sort functions\n * are not stable, and `_.sortBy` doesn't take a general comparator. Ideally\n * lodash would add a `_.sort` function whose API would mimic this function's.\n */\nexport function mergeSort<T>(\n array: T[],\n comparator: Comparator<T> = compare,\n): T[] {\n if (array.length <= 1) {\n return array;\n }\n\n const middleIndex = Math.floor(array.length / 2);\n const leftArray = mergeSort(array.slice(0, middleIndex), comparator);\n const rightArray = mergeSort(array.slice(middleIndex), comparator);\n\n return merge(leftArray, rightArray, comparator);\n}\n\nexport function sortMultiple<T>(\n itemA: T,\n itemB: T,\n sorts: Sort[],\n compareFn: Comparator,\n): number {\n let compareValue = 0;\n\n for (const { prop, direction } of sorts) {\n const valueA = get(itemA as object, prop);\n const valueB = get(itemB as object, prop);\n\n compareValue =\n direction === 'asc'\n ? compareFn(valueA, valueB)\n : -compareFn(valueA, valueB);\n\n if (compareValue !== 0) {\n break;\n }\n }\n\n return compareValue;\n}\n\nfunction isExactlyNaN(value: unknown): boolean {\n return typeof value === 'number' && isNaN(value);\n}\n\nfunction isEmpty(value: unknown): boolean {\n return isNone(value) || isExactlyNaN(value);\n}\n\nfunction orderEmptyValues(itemA: unknown, itemB: unknown): number {\n const aIsEmpty = isEmpty(itemA);\n const bIsEmpty = isEmpty(itemB);\n\n if (aIsEmpty && !bIsEmpty) {\n return -1;\n } else if (bIsEmpty && !aIsEmpty) {\n return 1;\n } else if (isNone(itemA) && isExactlyNaN(itemB)) {\n return -1;\n } else if (isExactlyNaN(itemA) && isNone(itemB)) {\n return 1;\n } else {\n return 0;\n }\n}\n\nexport function compareValues(itemA: unknown, itemB: unknown): number {\n if (isEmpty(itemA) || isEmpty(itemB)) {\n return orderEmptyValues(itemA, itemB);\n }\n\n return compare(itemA, itemB);\n}\n\nexport default compareValues;\n"],"names":["merge","left","right","comparator","mergedArray","leftIndex","rightIndex","length","comparison","push","splice","slice","mergeSort","array","compare","middleIndex","Math","floor","leftArray","rightArray","sortMultiple","itemA","itemB","sorts","compareFn","compareValue","prop","direction","valueA","get","valueB","isExactlyNaN","value","isNaN","isEmpty","isNone","orderEmptyValues","aIsEmpty","bIsEmpty","compareValues"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@triptyk/ember-yeti-table",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "Lightweight and flexible tables addon.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ember-addon",
|
|
@@ -16,12 +16,19 @@
|
|
|
16
16
|
"imports": {
|
|
17
17
|
"#src/*": "./src/*"
|
|
18
18
|
},
|
|
19
|
+
"volta": {
|
|
20
|
+
"node": "24.13.0",
|
|
21
|
+
"pnpm": "10.11.1"
|
|
22
|
+
},
|
|
19
23
|
"exports": {
|
|
20
24
|
".": {
|
|
25
|
+
"types": "./declarations/index.d.ts",
|
|
21
26
|
"default": "./dist/index.js"
|
|
22
27
|
},
|
|
23
|
-
"./addon-main.
|
|
28
|
+
"./addon-main.js": "./addon-main.cjs",
|
|
29
|
+
"./*.css": "./dist/*.css",
|
|
24
30
|
"./*": {
|
|
31
|
+
"types": "./declarations/*.d.ts",
|
|
25
32
|
"default": "./dist/*.js"
|
|
26
33
|
}
|
|
27
34
|
},
|
|
@@ -32,21 +39,18 @@
|
|
|
32
39
|
"src"
|
|
33
40
|
],
|
|
34
41
|
"dependencies": {
|
|
35
|
-
"@embroider/addon-shim": "^1.
|
|
42
|
+
"@embroider/addon-shim": "^1.8.9",
|
|
36
43
|
"decorator-transforms": "^2.2.2",
|
|
37
44
|
"deepmerge": "^4.3.1",
|
|
38
45
|
"ember-modifier": "^4.2.2",
|
|
39
46
|
"ember-resources": "^7.0.7",
|
|
40
47
|
"reactiveweb": "^1.9.1",
|
|
41
|
-
"@glimmer/component": "^2.0.0",
|
|
42
48
|
"tracked-toolbox": "^2.2.0"
|
|
43
49
|
},
|
|
44
|
-
"volta": {
|
|
45
|
-
"extends": "../package.json"
|
|
46
|
-
},
|
|
47
50
|
"devDependencies": {
|
|
48
51
|
"@babel/core": "^7.25.2",
|
|
49
52
|
"@babel/eslint-parser": "^7.25.1",
|
|
53
|
+
"@babel/plugin-transform-typescript": "^7.25.2",
|
|
50
54
|
"@babel/runtime": "^7.25.6",
|
|
51
55
|
"@ember/app-tsconfig": "^1.0.0",
|
|
52
56
|
"@ember/library-tsconfig": "^1.0.0",
|
|
@@ -55,12 +59,21 @@
|
|
|
55
59
|
"@embroider/addon-dev": "^8.1.0",
|
|
56
60
|
"@embroider/compat": "^4.1.0",
|
|
57
61
|
"@embroider/core": "^4.1.0",
|
|
58
|
-
"@embroider/macros": "^1.
|
|
62
|
+
"@embroider/macros": "^1.20.1",
|
|
59
63
|
"@embroider/vite": "^1.1.5",
|
|
60
64
|
"@eslint/js": "^9.17.0",
|
|
65
|
+
"@faker-js/faker": "^10.4.0",
|
|
66
|
+
"@glimmer/component": "^2.0.0",
|
|
67
|
+
"@glint/ember-tsc": "^1.0.3",
|
|
68
|
+
"@glint/template": "^1.6.1",
|
|
69
|
+
"@glint/tsserver-plugin": "^2.0.0",
|
|
61
70
|
"@rollup/plugin-babel": "^6.0.4",
|
|
62
|
-
"
|
|
71
|
+
"@types/qunit": "^2.19.12",
|
|
72
|
+
"@types/sinon": "^21.0.1",
|
|
73
|
+
"babel-plugin-ember-template-compilation": "^4.0.0",
|
|
63
74
|
"concurrently": "^9.0.1",
|
|
75
|
+
"ember-concurrency": "^5.2.0",
|
|
76
|
+
"ember-lifeline": "^7.0.0",
|
|
64
77
|
"ember-page-title": "^9.0.3",
|
|
65
78
|
"ember-qunit": "^9.0.2",
|
|
66
79
|
"ember-source": "^6.7.0",
|
|
@@ -72,12 +85,18 @@
|
|
|
72
85
|
"eslint-plugin-import": "^2.31.0",
|
|
73
86
|
"eslint-plugin-n": "^17.15.1",
|
|
74
87
|
"globals": "^16.1.0",
|
|
88
|
+
"lefthook": "^2.1.6",
|
|
89
|
+
"lint-staged": "^17.0.4",
|
|
75
90
|
"prettier": "^3.4.2",
|
|
76
91
|
"prettier-plugin-ember-template-tag": "^2.0.4",
|
|
92
|
+
"publint": "^0.3.16",
|
|
77
93
|
"qunit": "^2.24.1",
|
|
78
94
|
"qunit-dom": "^3.4.0",
|
|
79
|
-
"rollup": "
|
|
95
|
+
"rollup": "^4.22.5",
|
|
96
|
+
"sinon": "~22.0.0",
|
|
80
97
|
"testem": "^3.15.1",
|
|
98
|
+
"typescript": "~5.8.3",
|
|
99
|
+
"typescript-eslint": "^8.19.1",
|
|
81
100
|
"vite": "^7.1.9"
|
|
82
101
|
},
|
|
83
102
|
"ember": {
|
|
@@ -102,11 +121,7 @@
|
|
|
102
121
|
"./components/yeti-table/thead.js": "./dist/_app_/components/yeti-table/thead.js",
|
|
103
122
|
"./components/yeti-table/thead/row.js": "./dist/_app_/components/yeti-table/thead/row.js",
|
|
104
123
|
"./components/yeti-table/thead/row/cell.js": "./dist/_app_/components/yeti-table/thead/row/cell.js",
|
|
105
|
-
"./components/yeti-table/thead/row/column.js": "./dist/_app_/components/yeti-table/thead/row/column.js"
|
|
106
|
-
"./themes/default-theme.js": "./dist/_app_/themes/default-theme.js",
|
|
107
|
-
"./utils/create-regex.js": "./dist/_app_/utils/create-regex.js",
|
|
108
|
-
"./utils/filtering-utils.js": "./dist/_app_/utils/filtering-utils.js",
|
|
109
|
-
"./utils/sorting-utils.js": "./dist/_app_/utils/sorting-utils.js"
|
|
124
|
+
"./components/yeti-table/thead/row/column.js": "./dist/_app_/components/yeti-table/thead/row/column.js"
|
|
110
125
|
}
|
|
111
126
|
},
|
|
112
127
|
"scripts": {
|
|
@@ -119,6 +134,12 @@
|
|
|
119
134
|
"lint:hbs:fix": "ember-template-lint . --fix --no-error-on-unmatched-pattern",
|
|
120
135
|
"lint:js": "eslint . --cache",
|
|
121
136
|
"lint:js:fix": "eslint . --fix",
|
|
122
|
-
"
|
|
137
|
+
"lint:publish": "pnpm build && publint run --level error",
|
|
138
|
+
"lint:types": "ember-tsc --noEmit",
|
|
139
|
+
"start": "vite dev",
|
|
140
|
+
"test": "vite build --mode=development --out-dir dist-tests && testem --file testem.cjs ci --port 0",
|
|
141
|
+
"docs:dev": "pnpm --filter ember-yeti-table-docs dev",
|
|
142
|
+
"docs:build": "pnpm --filter ember-yeti-table-docs build",
|
|
143
|
+
"docs:preview": "pnpm --filter ember-yeti-table-docs preview"
|
|
123
144
|
}
|
|
124
145
|
}
|