ソースを参照

Added the option `sortEmptyLast` to allow sorting empty data (empty (#6302)

string, undefined, null) as last value
Dustin Utecht 3 年 前
コミット
7f9e6c5f65

+ 14 - 0
site/docs/api/table-options.md

@@ -1601,6 +1601,20 @@ The table options are defined in `jQuery.fn.bootstrapTable.defaults`.
 
 - **Example:** [Sort Class](https://examples.bootstrap-table.com/#options/sort-class.html)
 
+## sortEmptyLast
+
+- **Attribute:** `data-sort-empty-last`
+
+- **Type:** `Boolean`
+
+- **Detail:**
+
+  Set `true` to sort `<empty string>`, `undefined` and `null` as last value.
+
+- **Default:** `false`
+
+- **Example:** [Sort Empty Last](https://examples.bootstrap-table.com/#options/sort-empty-last.html)
+
 ## sortName
 
 - **Attribute:** `data-sort-name`

+ 1 - 2
src/bootstrap-table.js

@@ -495,8 +495,7 @@ class BootstrapTable {
             return order * value
           }
 
-          return Utils.sort(aa, bb, order, this.options.sortStable,
-            a._position, b._position)
+          return Utils.sort(aa, bb, order, this.options, a._position, b._position)
         })
       }
 

+ 1 - 0
src/constants/index.js

@@ -129,6 +129,7 @@ const DEFAULTS = {
   sortable: true,
   sortClass: undefined,
   silentSort: true,
+  sortEmptyLast: false,
   sortName: undefined,
   sortOrder: undefined,
   sortReset: false,

+ 8 - 8
src/extensions/filter-control/utils.js

@@ -77,7 +77,7 @@ export function addOptionToSelectControl (selectControl, _value, text, selected,
   selectControl.get(0).add(option)
 }
 
-export function sortSelectControl (selectControl, orderBy) {
+export function sortSelectControl (selectControl, orderBy, options) {
   const $selectControl = selectControl.get(0)
 
   if (orderBy === 'server') {
@@ -94,7 +94,7 @@ export function sortSelectControl (selectControl, orderBy) {
   }
 
   tmpAry.sort((a, b) => {
-    return Utils.sort(a[0], b[0], orderBy === 'desc' ? -1 : 1)
+    return Utils.sort(a[0], b[0], orderBy === 'desc' ? -1 : 1, options)
   })
   while ($selectControl.options.length > 0) {
     $selectControl.options[0] = null
@@ -335,7 +335,7 @@ export function initFilterSelectControls (that) {
       }
 
       if (that.options.sortSelectOptions) {
-        sortSelectControl(selectControl, 'asc')
+        sortSelectControl(selectControl, 'asc', that.options)
       }
     }
   })
@@ -619,7 +619,7 @@ const filterDataMethods = {
     }
 
     if (that.options.sortSelectOptions) {
-      sortSelectControl(selectControl, filterOrderBy)
+      sortSelectControl(selectControl, filterOrderBy, that.options)
     }
 
     setValues(that)
@@ -641,7 +641,7 @@ const filterDataMethods = {
     }
 
     if (that.options.sortSelectOptions) {
-      sortSelectControl(selectControl, filterOrderBy)
+      sortSelectControl(selectControl, filterOrderBy, that.options)
     }
 
     setValues(that)
@@ -659,7 +659,7 @@ const filterDataMethods = {
     }
 
     if (that.options.sortSelectOptions) {
-      sortSelectControl(selectControl, filterOrderBy)
+      sortSelectControl(selectControl, filterOrderBy, that.options)
     }
 
     setValues(that)
@@ -675,7 +675,7 @@ const filterDataMethods = {
         }
 
         if (that.options.sortSelectOptions) {
-          sortSelectControl(selectControl, filterOrderBy)
+          sortSelectControl(selectControl, filterOrderBy, that.options)
         }
 
         setValues(that)
@@ -691,7 +691,7 @@ const filterDataMethods = {
     }
 
     if (that.options.sortSelectOptions) {
-      sortSelectControl(selectControl, filterOrderBy)
+      sortSelectControl(selectControl, filterOrderBy, that.options)
     }
 
     setValues(that)

+ 12 - 2
src/utils/index.js

@@ -465,7 +465,7 @@ export default {
     return data
   },
 
-  sort (a, b, order, sortStable, aPosition, bPosition) {
+  sort (a, b, order, options, aPosition, bPosition) {
     if (a === undefined || a === null) {
       a = ''
     }
@@ -473,7 +473,7 @@ export default {
       b = ''
     }
 
-    if (sortStable && a === b) {
+    if (options.sortStable && a === b) {
       a = aPosition
       b = bPosition
     }
@@ -492,6 +492,16 @@ export default {
       return 0
     }
 
+    if (options.sortEmptyLast) {
+      if (a === '') {
+        return 1
+      }
+
+      if (b === '') {
+        return -1
+      }
+    }
+
     if (a === b) {
       return 0
     }