A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/vuematerial/vue-material/commit/906a91d below:

reactive selection (#1358) · vuematerial/vue-material@906a91d · GitHub

File tree Expand file treeCollapse file tree 5 files changed

+97

-59

lines changed

Filter options

Expand file treeCollapse file tree 5 files changed

+97

-59

lines changed Original file line number Diff line number Diff line change

@@ -1,11 +1,11 @@

1 1

<template>

2 2

<div>

3 -

<md-table v-model="people" md-card>

3 +

<md-table v-model="people" md-card @md-selected="onSelect">

4 4

<md-table-toolbar>

5 5

<h1 class="md-title">Selection Colors</h1>

6 6

</md-table-toolbar>

7 7 8 -

<md-table-row slot="md-table-row" slot-scope="{ item }" :class="getClass(item)" md-selectable="single" @md-selected="onSelect">

8 +

<md-table-row slot="md-table-row" slot-scope="{ item }" :class="getClass(item)" md-selectable="single">

9 9

<md-table-cell md-label="ID" md-sort-by="id" md-numeric>{{ item.id }}</md-table-cell>

10 10

<md-table-cell md-label="Name" md-sort-by="name">{{ item.name }}</md-table-cell>

11 11

<md-table-cell md-label="Email" md-sort-by="email">{{ item.email }}</md-table-cell>

Original file line number Diff line number Diff line change

@@ -27,7 +27,8 @@

27 27

v-for="(item, index) in value"

28 28

:key="getRowId(item[mdModelId])"

29 29

:md-id="getRowId(item[mdModelId])"

30 -

:md-index="index">

30 +

:md-index="index"

31 +

:md-item="item">

31 32

<slot name="md-table-row" :item="item" />

32 33

</md-table-row-ghost>

33 34

</tbody>

@@ -69,7 +70,7 @@

69 70 70 71

return value

71 72

}

72 - 73 + 73 74

export default {

74 75

name: 'MdTable',

75 76

components: {

@@ -119,6 +120,9 @@

119 120

return aAttr.localeCompare(bAttr)

120 121

})

121 122

}

123 +

},

124 +

mdSelectedValue: {

125 +

type: [Array, Object]

122 126

}

123 127

},

124 128

data () {

@@ -130,8 +134,8 @@

130 134

sort: null,

131 135

sortOrder: null,

132 136

singleSelection: null,

133 -

selectedItems: {},

134 -

selectable: {},

137 +

selectedItems: [],

138 +

selectable: [],

135 139

fixedHeader: null,

136 140

contentPadding: null,

137 141

contentEl: null,

@@ -142,7 +146,8 @@

142 146

sortTable: this.sortTable,

143 147

manageItemSelection: this.manageItemSelection,

144 148

getModel: this.getModel,

145 -

getModelItem: this.getModelItem

149 +

getModelItem: this.getModelItem,

150 +

selectingMode: null

146 151

}

147 152

}

148 153

},

@@ -158,7 +163,7 @@

158 163

return Object.keys(this.MdTable.items).length

159 164

},

160 165

selectedCount () {

161 -

return Object.keys(this.MdTable.selectedItems).length

166 +

return this.MdTable.selectedItems.length

162 167

},

163 168

headerStyles () {

164 169

if (this.mdFixedHeader) {

@@ -213,6 +218,15 @@

213 218

handler () {

214 219

this.MdTable.hasValue = this.hasValue

215 220

}

221 +

},

222 +

'MdTable.selectedItems' (val) {

223 +

this.select(val)

224 +

},

225 +

'MdTable.singleSelection' (val) {

226 +

this.select(val)

227 +

},

228 +

mdSelectedValue () {

229 +

this.syncSelectedValue()

216 230

}

217 231

},

218 232

methods: {

@@ -251,24 +265,38 @@

251 265

getModelItem (index) {

252 266

return this.value[index]

253 267

},

254 -

manageItemSelection (index) {

255 -

if (this.MdTable.selectedItems[index]) {

256 -

this.$delete(this.MdTable.selectedItems, index)

268 +

manageItemSelection (item) {

269 +

if (this.MdTable.selectedItems.includes(item)) {

270 +

this.MdTable.selectedItems = this.MdTable.selectedItems.filter(target => target !== item)

257 271

} else {

258 -

this.$set(this.MdTable.selectedItems, index, this.value[index])

272 +

this.MdTable.selectedItems.push(item)

259 273

}

260 - 261 -

this.sendSelectionEvent()

262 -

},

263 -

sendSelectionEvent () {

264 -

this.$emit('md-selected', Object.values(this.MdTable.selectedItems))

265 274

},

266 275

sortTable () {

267 276

if (Array.isArray(this.value)) {

268 277

this.$emit('input', this.mdSortFn(this.value))

269 278

}

279 +

},

280 +

select (val) {

281 +

this.$emit('update:mdSelectedValue', val)

282 +

this.$emit('md-selected', val)

283 +

},

284 +

syncSelectedValue () {

285 +

switch (this.MdTable.selectingMode) {

286 +

case 'single':

287 +

this.MdTable.singleSelection = this.mdSelectedValue

288 +

break

289 +

case 'multiple':

290 +

this.MdTable.selectedItems = this.mdSelectedValue || []

291 +

break

292 +

}

270 293

}

271 294

},

295 +

async created () {

296 +

// wait for `selectingMode` from `TableRow`

297 +

await this.$nextTick()

298 +

this.syncSelectedValue()

299 +

},

272 300

mounted () {

273 301

this.setContentEl()

274 302 Original file line number Diff line number Diff line change

@@ -1,7 +1,7 @@

1 1

<template>

2 2

<md-table-head class="md-table-cell-selection" v-if="selectableCount">

3 3

<div class="md-table-cell-container">

4 -

<md-checkbox v-model="allSelected" :disabled="isDisabled" @change="onChange" />

4 +

<md-checkbox :model="allSelected" :disabled="isDisabled" @change="onChange" />

5 5

</div>

6 6

</md-table-head>

7 7

</template>

@@ -15,9 +15,6 @@

15 15

MdTableHead

16 16

},

17 17

inject: ['MdTable'],

18 -

data: () => ({

19 -

allSelected: false

20 -

}),

21 18

computed: {

22 19

selectableCount () {

23 20

return Object.keys(this.selectable).length

@@ -30,28 +27,22 @@

30 27

},

31 28

selectedItems () {

32 29

return this.MdTable.selectedItems

33 -

}

34 -

},

35 -

watch: {

36 -

selectedItems: {

37 -

immediate: true,

38 -

deep: true,

39 -

handler (items) {

40 -

window.setTimeout(() => {

41 -

const countSelected = Object.keys(items).length

42 - 43 -

if (this.selectableCount > 0 && countSelected > 0) {

44 -

this.allSelected = countSelected === this.selectableCount

45 -

}

46 -

}, 10)

30 +

},

31 +

allSelected () {

32 +

if (this.selectableCount === 0) {

33 +

return false

47 34

}

35 + 36 +

return this.selectable.every(item => this.selectedItems.includes(item))

48 37

}

49 38

},

50 39

methods: {

51 -

onChange () {

52 -

Object.values(this.MdTable.selectable).forEach(callback => {

53 -

callback(this.allSelected)

54 -

})

40 +

onChange (val) {

41 +

if (val) {

42 +

this.MdTable.selectedItems = this.selectedItems.concat(this.selectable.filter(item => !this.selectedItems.includes(item)))

43 +

} else {

44 +

this.MdTable.selectedItems = this.selectedItems.filter(item => !this.selectable.includes(item))

45 +

}

55 46

}

56 47

}

57 48

}

Original file line number Diff line number Diff line change

@@ -27,7 +27,8 @@

27 27

...MdPropValidator('md-selectable', ['multiple', 'single'])

28 28

},

29 29

mdDisabled: Boolean,

30 -

mdAutoSelect: Boolean

30 +

mdAutoSelect: Boolean,

31 +

mdItem: Object

31 32

},

32 33

inject: ['MdTable'],

33 34

data: () => ({

@@ -39,7 +40,7 @@

39 40

return Object.keys(this.MdTable.selectable).length

40 41

},

41 42

isSingleSelected () {

42 -

return this.MdTable.singleSelection === this.mdId

43 +

return this.MdTable.singleSelection === this.mdItem

43 44

},

44 45

hasMultipleSelection () {

45 46

return this.MdTable.hasValue && this.mdSelectable === 'multiple'

@@ -55,6 +56,9 @@

55 56

'md-selected-single': this.isSingleSelected

56 57

}

57 58

}

59 +

},

60 +

isInSelectedItems () {

61 +

return this.MdTable.selectedItems.includes(this.mdItem)

58 62

}

59 63

},

60 64

watch: {

@@ -65,12 +69,20 @@

65 69

this.addSelectableItem()

66 70

}

67 71

},

68 -

mdId (newId, oldId) {

69 -

this.removeSelectableItem(oldId)

70 -

this.addSelectableItem(newId)

72 +

isSelected (val) {

73 +

let noChange = (val && this.isInSelectedItems) || (!val && !this.isInSelectedItems)

74 + 75 +

if (noChange) {

76 +

return false

77 +

}

78 + 79 +

this.MdTable.manageItemSelection(this.mdItem)

80 +

},

81 +

isInSelectedItems (val) {

82 +

this.isSelected = val

71 83

},

72 -

isSelected () {

73 -

this.MdTable.manageItemSelection(this.mdIndex)

84 +

mdSelectable () {

85 +

this.MdTable.selectingMode = this.mdSelectable

74 86

}

75 87

},

76 88

methods: {

@@ -87,34 +99,39 @@

87 99

this.isSelected = !this.isSelected

88 100

},

89 101

selectRowIfSingle () {

90 -

if (this.MdTable.singleSelection === this.mdId) {

102 +

if (this.MdTable.singleSelection === this.mdItem) {

91 103

this.MdTable.singleSelection = null

92 -

this.$emit('md-selected', null)

93 104

} else {

94 -

this.MdTable.singleSelection = this.mdId

95 -

this.$emit('md-selected', this.MdTable.getModelItem(this.mdIndex))

105 +

this.MdTable.singleSelection = this.mdItem

96 106

}

97 107

},

98 108

selectRowIfMultiple () {

99 109

if (this.mdAutoSelect) {

100 110

this.toggleSelection()

101 111

}

102 112

},

103 -

addSelectableItem (id) {

104 -

if (this.hasMultipleSelection && !this.mdDisabled) {

105 -

this.$set(this.MdTable.selectable, id || this.mdId, isSelected => {

106 -

this.isSelected = isSelected

107 -

})

113 +

addSelectableItem () {

114 +

if (!this.hasMultipleSelection || this.mdDisabled) {

115 +

return

108 116

}

117 + 118 +

if (this.MdTable.selectable.includes(this.mdItem)) {

119 +

return

120 +

}

121 + 122 +

this.MdTable.selectable.push(this.mdItem)

109 123

},

110 -

removeSelectableItem (id) {

111 -

if (this.hasMultipleSelection) {

112 -

this.$delete(this.MdTable.selectable, id || this.mdId)

124 +

removeSelectableItem () {

125 +

if (!this.hasMultipleSelection) {

126 +

return

113 127

}

128 + 129 +

this.MdTable.selectable = this.MdTable.selectable.filter(item => item !== this.mdItem)

114 130

}

115 131

},

116 132

created () {

117 133

this.addSelectableItem()

134 +

this.MdTable.selectingMode = this.mdSelectable

118 135

},

119 136

beforeDestroy () {

120 137

this.removeSelectableItem()

Original file line number Diff line number Diff line change

@@ -4,11 +4,13 @@

4 4

abstract: true,

5 5

props: {

6 6

mdIndex: [String, Number],

7 -

mdId: [String, Number]

7 +

mdId: [String, Number],

8 +

mdItem: Object

8 9

},

9 10

render () {

10 11

this.$slots.default[0].componentOptions.propsData.mdIndex = this.mdIndex

11 12

this.$slots.default[0].componentOptions.propsData.mdId = this.mdId

13 +

this.$slots.default[0].componentOptions.propsData.mdItem = this.mdItem

12 14 13 15

return this.$slots.default[0]

14 16

}

You can’t perform that action at this time.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4