@gm-pc/react 1.28.0-y.0 → 1.28.1-beta.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gm-pc/react",
3
- "version": "1.28.0-y.0",
3
+ "version": "1.28.1-beta.1",
4
4
  "description": "观麦前端基础组件库",
5
5
  "author": "liyatang <liyatang@qq.com>",
6
6
  "homepage": "https://github.com/gmfe/gm-pc#readme",
@@ -24,7 +24,7 @@
24
24
  "dependencies": {
25
25
  "@gm-common/hooks": "^2.10.0",
26
26
  "@gm-common/tool": "^2.10.0",
27
- "@gm-pc/locales": "^1.28.0-y.0",
27
+ "@gm-pc/locales": "^1.28.1-beta.1",
28
28
  "big.js": "^6.0.1",
29
29
  "classnames": "^2.2.5",
30
30
  "lodash": "^4.17.19",
@@ -48,5 +48,5 @@
48
48
  "react-router-dom": "^5.2.0",
49
49
  "react-window": "^1.8.5"
50
50
  },
51
- "gitHead": "553a50edcf56e3bc001e96d2e6f752344b51021d"
51
+ "gitHead": "7569ceca52d7946b2d44f48bf2a43f5fcaf7d715"
52
52
  }
@@ -23,6 +23,7 @@ import { ConfigConsumer, ConfigProvider, ConfigProviderProps } from '../config_p
23
23
  import { Checkbox } from '../checkbox'
24
24
  import { Switch } from '../switch'
25
25
  interface MoreSelectBaseState {
26
+ canClear?: boolean
26
27
  searchValue: string
27
28
  loading: boolean
28
29
  /* keyboard 默认第一个位置 */
@@ -212,6 +213,12 @@ class MoreSelectBase<V extends string | number = string> extends Component<
212
213
  onSelect(willSelected)
213
214
  }
214
215
 
216
+ private _handleClearAll = (event: MouseEvent): void => {
217
+ event.stopPropagation()
218
+ const { onSelect = _.noop } = this.props
219
+ onSelect([])
220
+ }
221
+
215
222
  private _handlePopupKeyDown = (event: KeyboardEvent<HTMLDivElement>): void => {
216
223
  const { onKeyDown } = this.props
217
224
  let willActiveIndex = this.state.willActiveIndex as number
@@ -292,6 +299,9 @@ class MoreSelectBase<V extends string | number = string> extends Component<
292
299
  ? flatFilterData.filter((item) => !item.deleted)
293
300
  : flatFilterData
294
301
 
302
+ // 计算总数:availableData + selected,过滤重复值
303
+ const totalCount = _.uniqBy([...availableData, ...selected], 'value').length
304
+
295
305
  // 检查是否所有可用数据都被选中
296
306
  const allSelected =
297
307
  availableData.length > 0 &&
@@ -334,7 +344,7 @@ class MoreSelectBase<V extends string | number = string> extends Component<
334
344
  }
335
345
  }}
336
346
  >
337
- 全选({availableData.length})
347
+ 全选({totalCount})
338
348
  </Checkbox>
339
349
  )}
340
350
  {isShowDeletedSwitch && (
@@ -402,36 +412,38 @@ class MoreSelectBase<V extends string | number = string> extends Component<
402
412
  listHeight,
403
413
  } = this.props
404
414
 
405
- const selectedValues = new Set(selected.map((v) => v.value))
415
+ const selectedValues = new Set(selected?.map((v) => v.value))
406
416
 
407
417
  // 分离已勾选和未勾选的数据
408
418
  const availableGroups: MoreSelectGroupDataItem<V>[] = []
419
+ // 已选中区域直接使用 selected 构建,不受筛选影响
420
+ const selectedGroups: MoreSelectGroupDataItem<V>[] = []
409
421
 
410
- filterData.forEach((group) => {
411
- const availableChildren = group.children.filter(
412
- (item) => !selectedValues.has(item.value)
413
- )
422
+ if (multiple) {
423
+ filterData.forEach((group) => {
424
+ const availableChildren = group.children.filter(
425
+ (item) => !selectedValues.has(item.value)
426
+ )
427
+
428
+ if (availableChildren.length > 0) {
429
+ availableGroups.push({
430
+ ...group,
431
+ children: availableChildren,
432
+ })
433
+ }
434
+ })
414
435
 
415
- if (availableChildren.length > 0) {
416
- availableGroups.push({
417
- ...group,
418
- children: availableChildren,
436
+ if (selected.length > 0) {
437
+ selectedGroups.push({
438
+ label: '',
439
+ children: selected,
419
440
  })
420
441
  }
421
- })
422
-
423
- // 已选中区域直接使用 selected 构建,不受筛选影响
424
- const selectedGroups: MoreSelectGroupDataItem<V>[] = []
425
- if (selected.length > 0) {
426
- selectedGroups.push({
427
- label: '',
428
- children: selected,
429
- })
430
442
  }
431
443
 
432
444
  return (
433
445
  <div style={{ height: listHeight, overflow: 'auto' }}>
434
- {selectedGroups.length > 0 && (
446
+ {selected.length > 0 && multiple && (
435
447
  <>
436
448
  <div className='gm-more-select-section-title gm-padding-5 gm-text-desc gm-text-12'>
437
449
  已选中
@@ -445,28 +457,28 @@ class MoreSelectBase<V extends string | number = string> extends Component<
445
457
  renderItem={renderListItem}
446
458
  onSelect={this._handleSelect}
447
459
  isScrollTo={false}
448
- willActiveIndex={willActiveIndex!}
449
460
  />
450
461
  </>
451
462
  )}
452
- {availableGroups.length > 0 && (
453
- <>
463
+ <>
464
+ {multiple && (
454
465
  <div className='gm-more-select-section-title gm-padding-5 gm-text-desc gm-text-12'>
455
466
  未选中
456
467
  </div>
457
- <ListBase
458
- selected={selected.map((v) => v.value)}
459
- data={availableGroups}
460
- multiple={multiple}
461
- isGroupList={isGroupList}
462
- className='gm-border-0'
463
- renderItem={renderListItem}
464
- onSelect={this._handleSelect}
465
- isScrollTo={false}
466
- willActiveIndex={willActiveIndex!}
467
- />
468
- </>
469
- )}
468
+ )}
469
+
470
+ <ListBase
471
+ selected={selected?.map((v) => v.value)}
472
+ data={multiple ? availableGroups : filterData}
473
+ multiple={multiple}
474
+ isGroupList={isGroupList}
475
+ className='gm-border-0'
476
+ renderItem={renderListItem}
477
+ onSelect={this._handleSelect}
478
+ isScrollTo
479
+ willActiveIndex={willActiveIndex!}
480
+ />
481
+ </>
470
482
  </div>
471
483
  )
472
484
  }
@@ -635,6 +647,10 @@ class MoreSelectBase<V extends string | number = string> extends Component<
635
647
  )}
636
648
  </Flex>
637
649
  )}
650
+ <SVGRemove
651
+ className='gm-cursor gm-more-select-clear-btn'
652
+ onClick={disabled ? _.noop : this._handleClearAll}
653
+ />
638
654
  </>
639
655
  )
640
656
  }