SelectionCheckboxAll.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
  6. var _defineProperty3 = _interopRequireDefault(_defineProperty2);
  7. var _extends2 = require('babel-runtime/helpers/extends');
  8. var _extends3 = _interopRequireDefault(_extends2);
  9. var _checkbox = require('../checkbox');
  10. var _checkbox2 = _interopRequireDefault(_checkbox);
  11. var _dropdown = require('../dropdown');
  12. var _dropdown2 = _interopRequireDefault(_dropdown);
  13. var _menu = require('../menu');
  14. var _menu2 = _interopRequireDefault(_menu);
  15. var _icon = require('../icon');
  16. var _icon2 = _interopRequireDefault(_icon);
  17. var _classnames = require('classnames');
  18. var _classnames2 = _interopRequireDefault(_classnames);
  19. var _interface = require('./interface');
  20. var _BaseMixin = require('../_util/BaseMixin');
  21. var _BaseMixin2 = _interopRequireDefault(_BaseMixin);
  22. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  23. function checkSelection(_ref) {
  24. var store = _ref.store,
  25. getCheckboxPropsByItem = _ref.getCheckboxPropsByItem,
  26. getRecordKey = _ref.getRecordKey,
  27. data = _ref.data,
  28. type = _ref.type,
  29. byDefaultChecked = _ref.byDefaultChecked;
  30. return byDefaultChecked ? data[type](function (item, i) {
  31. return getCheckboxPropsByItem(item, i).defaultChecked;
  32. }) : data[type](function (item, i) {
  33. return store.selectedRowKeys.indexOf(getRecordKey(item, i)) >= 0;
  34. });
  35. }
  36. function getIndeterminateState(props) {
  37. var store = props.store,
  38. data = props.data;
  39. if (!data.length) {
  40. return false;
  41. }
  42. var someCheckedNotByDefaultChecked = checkSelection((0, _extends3['default'])({}, props, {
  43. data: data,
  44. type: 'some',
  45. byDefaultChecked: false
  46. })) && !checkSelection((0, _extends3['default'])({}, props, {
  47. data: data,
  48. type: 'every',
  49. byDefaultChecked: false
  50. }));
  51. var someCheckedByDefaultChecked = checkSelection((0, _extends3['default'])({}, props, {
  52. data: data,
  53. type: 'some',
  54. byDefaultChecked: true
  55. })) && !checkSelection((0, _extends3['default'])({}, props, {
  56. data: data,
  57. type: 'every',
  58. byDefaultChecked: true
  59. }));
  60. if (store.selectionDirty) {
  61. return someCheckedNotByDefaultChecked;
  62. }
  63. return someCheckedNotByDefaultChecked || someCheckedByDefaultChecked;
  64. }
  65. function getCheckState(props) {
  66. var store = props.store,
  67. data = props.data;
  68. if (!data.length) {
  69. return false;
  70. }
  71. if (store.selectionDirty) {
  72. return checkSelection((0, _extends3['default'])({}, props, {
  73. data: data,
  74. type: 'every',
  75. byDefaultChecked: false
  76. }));
  77. }
  78. return checkSelection((0, _extends3['default'])({}, props, {
  79. data: data,
  80. type: 'every',
  81. byDefaultChecked: false
  82. })) || checkSelection((0, _extends3['default'])({}, props, {
  83. data: data,
  84. type: 'every',
  85. byDefaultChecked: true
  86. }));
  87. }
  88. exports['default'] = {
  89. name: 'SelectionCheckboxAll',
  90. mixins: [_BaseMixin2['default']],
  91. props: _interface.SelectionCheckboxAllProps,
  92. data: function data() {
  93. var props = this.$props;
  94. this.defaultSelections = props.hideDefaultSelections ? [] : [{
  95. key: 'all',
  96. text: props.locale.selectAll
  97. }, {
  98. key: 'invert',
  99. text: props.locale.selectInvert
  100. }];
  101. return {
  102. checked: getCheckState(props),
  103. indeterminate: getIndeterminateState(props)
  104. };
  105. },
  106. watch: {
  107. $props: {
  108. handler: function handler() {
  109. this.setCheckState(this.$props);
  110. },
  111. deep: true,
  112. immediate: true
  113. }
  114. },
  115. methods: {
  116. checkSelection: function checkSelection(props, data, type, byDefaultChecked) {
  117. var _ref2 = props || this.$props,
  118. store = _ref2.store,
  119. getCheckboxPropsByItem = _ref2.getCheckboxPropsByItem,
  120. getRecordKey = _ref2.getRecordKey;
  121. // type should be 'every' | 'some'
  122. if (type === 'every' || type === 'some') {
  123. return byDefaultChecked ? data[type](function (item, i) {
  124. return getCheckboxPropsByItem(item, i).props.defaultChecked;
  125. }) : data[type](function (item, i) {
  126. return store.selectedRowKeys.indexOf(getRecordKey(item, i)) >= 0;
  127. });
  128. }
  129. return false;
  130. },
  131. setCheckState: function setCheckState(props) {
  132. var checked = getCheckState(props);
  133. var indeterminate = getIndeterminateState(props);
  134. this.setState(function (prevState) {
  135. var newState = {};
  136. if (indeterminate !== prevState.indeterminate) {
  137. newState.indeterminate = indeterminate;
  138. }
  139. if (checked !== prevState.checked) {
  140. newState.checked = checked;
  141. }
  142. return newState;
  143. });
  144. },
  145. handleSelectAllChange: function handleSelectAllChange(e) {
  146. var checked = e.target.checked;
  147. this.$emit('select', checked ? 'all' : 'removeAll', 0, null);
  148. },
  149. renderMenus: function renderMenus(selections) {
  150. var _this = this;
  151. var h = this.$createElement;
  152. return selections.map(function (selection, index) {
  153. return h(
  154. _menu2['default'].Item,
  155. { key: selection.key || index },
  156. [h(
  157. 'div',
  158. {
  159. on: {
  160. 'click': function click() {
  161. _this.$emit('select', selection.key, index, selection.onSelect);
  162. }
  163. }
  164. },
  165. [selection.text]
  166. )]
  167. );
  168. });
  169. }
  170. },
  171. render: function render() {
  172. var h = arguments[0];
  173. var disabled = this.disabled,
  174. prefixCls = this.prefixCls,
  175. selections = this.selections,
  176. getPopupContainer = this.getPopupContainer,
  177. checked = this.checked,
  178. indeterminate = this.indeterminate;
  179. var selectionPrefixCls = prefixCls + '-selection';
  180. var customSelections = null;
  181. if (selections) {
  182. var newSelections = Array.isArray(selections) ? this.defaultSelections.concat(selections) : this.defaultSelections;
  183. var menu = h(
  184. _menu2['default'],
  185. { 'class': selectionPrefixCls + '-menu', attrs: { selectedKeys: [] }
  186. },
  187. [this.renderMenus(newSelections)]
  188. );
  189. customSelections = newSelections.length > 0 ? h(
  190. _dropdown2['default'],
  191. {
  192. attrs: { getPopupContainer: getPopupContainer }
  193. },
  194. [h(
  195. 'template',
  196. { slot: 'overlay' },
  197. [menu]
  198. ), h(
  199. 'div',
  200. { 'class': selectionPrefixCls + '-down' },
  201. [h(_icon2['default'], {
  202. attrs: { type: 'down' }
  203. })]
  204. )]
  205. ) : null;
  206. }
  207. return h(
  208. 'div',
  209. { 'class': selectionPrefixCls },
  210. [h(_checkbox2['default'], {
  211. 'class': (0, _classnames2['default'])((0, _defineProperty3['default'])({}, selectionPrefixCls + '-select-all-custom', customSelections)),
  212. attrs: { checked: checked,
  213. indeterminate: indeterminate,
  214. disabled: disabled
  215. },
  216. on: {
  217. 'change': this.handleSelectAllChange
  218. }
  219. }), customSelections]
  220. );
  221. }
  222. };