@gm-pc/react 1.28.0-beta.2 → 1.28.0-beta.6

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-beta.2",
3
+ "version": "1.28.0-beta.6",
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-beta.2",
27
+ "@gm-pc/locales": "^1.28.0-beta.6",
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": "8e9f3a00a9da2a0d800dafeb65f37d737f84be75"
51
+ "gitHead": "368692a99f02f1649395b3641323775af12fe817"
52
52
  }
@@ -172,8 +172,14 @@ class MoreSelectBase<V extends string | number = string> extends Component<
172
172
  event: ChangeEvent<HTMLInputElement>,
173
173
  isInitSearch?: boolean
174
174
  ): void => {
175
+ const { onSearch } = this.props
175
176
  const searchValue = event.target.value
176
177
  this.setState({ searchValue })
178
+ if (onSearch && !this._isUnmounted) {
179
+ this.setState({
180
+ loading: true,
181
+ })
182
+ }
177
183
  this._debounceDoSearch(searchValue)
178
184
  setTimeout(() => {
179
185
  // eslint-disable-next-line no-unused-expressions
@@ -187,14 +193,12 @@ class MoreSelectBase<V extends string | number = string> extends Component<
187
193
  private _doSearch = (query: string): void => {
188
194
  const { onSearch, data = [] } = this.props
189
195
  if (!this._isUnmounted && onSearch) {
190
- const result = onSearch(query, data)
191
- if (!result) {
192
- return
193
- }
194
196
  this.setState({ loading: true })
195
-
197
+ const result = onSearch(query, data)
196
198
  Promise.resolve(result).finally(() => {
197
- this.setState({ loading: false })
199
+ setTimeout(() => {
200
+ this.setState({ loading: false })
201
+ }, 50)
198
202
  })
199
203
  }
200
204
  }
@@ -243,9 +247,9 @@ class MoreSelectBase<V extends string | number = string> extends Component<
243
247
  }
244
248
 
245
249
  private _getFilterData = () => {
246
- const { data = [], renderListFilter, renderListFilterType } = this.props
250
+ const { data = [], renderListFilter, renderListFilterType, onSearch } = this.props
247
251
  const { searchValue } = this.state
248
- let filterData: MoreSelectGroupDataItem<V>[]
252
+ let filterData: MoreSelectGroupDataItem<V>[] = []
249
253
  if (renderListFilter) {
250
254
  filterData = renderListFilter(data, searchValue)
251
255
  } else if (renderListFilterType === 'pinyin') {
@@ -313,10 +317,20 @@ class MoreSelectBase<V extends string | number = string> extends Component<
313
317
  if (isChecked) {
314
318
  // 全选当前过滤后的可用数据
315
319
  const valuesToSelect = availableData.map((item) => item.value)
316
- this._handleSelect(valuesToSelect)
320
+ const prevSelectedValue = selected.map((item) => item.value)
321
+ // console.log(valuesToSelect, selected)
322
+ const newSelected = Array.from(
323
+ new Set([...prevSelectedValue, ...valuesToSelect])
324
+ )
325
+ this._handleSelect(newSelected)
317
326
  } else {
318
- // 取消全选
319
- this._handleSelect([])
327
+ // 取消全选 - 只反勾选availableData的数据
328
+ const { selected = [] } = this.props
329
+ const availableValues = availableData.map((item) => item.value)
330
+ const newSelected = selected.filter(
331
+ (item) => !availableValues.includes(item.value)
332
+ )
333
+ this._handleSelect(newSelected.map((item) => item.value))
320
334
  }
321
335
  }}
322
336
  >
@@ -352,12 +366,60 @@ class MoreSelectBase<V extends string | number = string> extends Component<
352
366
  )
353
367
  }
354
368
 
369
+ renderContent = () => {
370
+ const { loading, willActiveIndex, isFilterDelete } = this.state
371
+
372
+ if (loading) {
373
+ return (
374
+ <Flex alignCenter justifyCenter className='gm-bg gm-padding-5'>
375
+ <Loading size='20px' />
376
+ </Flex>
377
+ )
378
+ }
379
+
380
+ let filterData = this._getFilterData()
381
+
382
+ // 如果开启了过滤已删除商品功能,需要过滤掉已删除的商品
383
+ if (isFilterDelete) {
384
+ filterData = filterData
385
+ .map((group) => ({
386
+ ...group,
387
+ children: group.children.filter((item) => !item.deleted),
388
+ }))
389
+ .filter((group) => group.children.length > 0)
390
+ }
391
+
392
+ if (!loading && filterData.length === 0) {
393
+ return this._renderEmpty()
394
+ }
395
+
396
+ if (!loading && filterData.length > 0) {
397
+ const {
398
+ selected = [],
399
+ multiple,
400
+ isGroupList,
401
+ renderListItem,
402
+ listHeight,
403
+ } = this.props
404
+ return (
405
+ <ListBase
406
+ selected={selected.map((v) => v.value)}
407
+ data={filterData}
408
+ multiple={multiple}
409
+ isGroupList={isGroupList}
410
+ className='gm-border-0'
411
+ renderItem={renderListItem}
412
+ onSelect={this._handleSelect}
413
+ isScrollTo
414
+ willActiveIndex={willActiveIndex!}
415
+ style={{ height: listHeight }}
416
+ />
417
+ )
418
+ }
419
+ }
420
+
355
421
  private _renderList = (config: ConfigProviderProps): ReactNode => {
356
422
  const {
357
- selected = [],
358
- multiple,
359
- isGroupList,
360
- renderListItem,
361
423
  searchPlaceholder,
362
424
  listHeight,
363
425
  popupClassName,
@@ -392,28 +454,7 @@ class MoreSelectBase<V extends string | number = string> extends Component<
392
454
  placeholder={searchPlaceholder}
393
455
  />
394
456
  </div>
395
- <div style={{ height: listHeight }}>
396
- {loading && (
397
- <Flex alignCenter justifyCenter className='gm-bg gm-padding-5'>
398
- <Loading size='20px' />
399
- </Flex>
400
- )}
401
- {!loading && !filterData.length && this._renderEmpty()}
402
- {!loading && !!filterData.length && (
403
- <ListBase
404
- selected={selected.map((v) => v.value)}
405
- data={filterData}
406
- multiple={multiple}
407
- isGroupList={isGroupList}
408
- className='gm-border-0'
409
- renderItem={renderListItem}
410
- onSelect={this._handleSelect}
411
- isScrollTo
412
- willActiveIndex={willActiveIndex!}
413
- style={{ height: listHeight }}
414
- />
415
- )}
416
- </div>
457
+ <div style={{ height: listHeight }}>{this.renderContent()}</div>
417
458
  {!loading &&
418
459
  !!filterData.length &&
419
460
  (renderCustomizedBottom
@@ -93,7 +93,7 @@ interface MoreSelectBaseProps<V extends string | number = string>
93
93
  onSelect(selected: MoreSelectDataItem<V>[]): void
94
94
 
95
95
  /** 搜索回调 */
96
- onSearch?(searchWord: string, data: MoreSelectGroupDataItem<V>[]): Promise<void> | void
96
+ onSearch?(searchWord: string, data: MoreSelectGroupDataItem<V>[]): Promise<any> | any
97
97
  /** 点击回调 */
98
98
  onClick?(selected: MoreSelectSelected<V>[]): void
99
99
 
@@ -128,7 +128,7 @@ interface MoreSelectProps<V extends string | number = string>
128
128
  onSelect?(selected?: MoreSelectSelected<V>): void
129
129
  onChange?(value: V | V[]): void
130
130
  /** 搜索回调 */
131
- onSearch?(searchWord: string, data: MoreSelectData<V>): Promise<void> | void
131
+ onSearch?(searchWord: string, data: MoreSelectData<V>): Promise<void | any> | any
132
132
  /** 点击回调 */
133
133
  onClick?(selected: MoreSelectSelected<V>[]): void
134
134