Dummy drag and drop list
This commit is contained in:
		
							parent
							
								
									351c12241a
								
							
						
					
					
						commit
						4380c9cb52
					
				
					 8 changed files with 260 additions and 7 deletions
				
			
		|  | @ -3,6 +3,11 @@ | ||||||
| This README outlines the details of collaborating on this Ember application. | This README outlines the details of collaborating on this Ember application. | ||||||
| A short introduction of this app could easily go here. | A short introduction of this app could easily go here. | ||||||
| 
 | 
 | ||||||
|  | This example apps uses: | ||||||
|  | 
 | ||||||
|  | * Ember-Sortable | ||||||
|  | * Ember-Concurrency | ||||||
|  | 
 | ||||||
| ## Prerequisites | ## Prerequisites | ||||||
| 
 | 
 | ||||||
| You will need the following things properly installed on your computer. | You will need the following things properly installed on your computer. | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								app/components/recipe-list.hbs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								app/components/recipe-list.hbs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | <SortableGroup | ||||||
|  |   @model={{this.items}} | ||||||
|  |   @onChange={{action this.reorderItems}} | ||||||
|  |   as |group|> | ||||||
|  |   {{#each group.model as |modelItem|}} | ||||||
|  |     <group.item | ||||||
|  |       @model={{modelItem}} | ||||||
|  |       as |item|> | ||||||
|  |       <item.handle> | ||||||
|  |         <span class="handle">↕</span> | ||||||
|  |         {{modelItem.name}} | ||||||
|  |       </item.handle> | ||||||
|  |     </group.item> | ||||||
|  |   {{/each}} | ||||||
|  | </SortableGroup> | ||||||
							
								
								
									
										19
									
								
								app/components/recipe-list.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								app/components/recipe-list.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | ||||||
|  | import Component from '@glimmer/component'; | ||||||
|  | import { tracked } from "@glimmer/tracking"; | ||||||
|  | import { action } from "@ember/object"; | ||||||
|  | import { A } from '@ember/array'; | ||||||
|  | 
 | ||||||
|  | export default class RecipeListComponent extends Component { | ||||||
|  |   @tracked items = A([ | ||||||
|  |     { | ||||||
|  |       name: 'foo', | ||||||
|  |     }, { | ||||||
|  |       name: 'bar', | ||||||
|  |     }, | ||||||
|  |   ]); | ||||||
|  | 
 | ||||||
|  |   @action | ||||||
|  |   reorderItems(reorderedItems) { | ||||||
|  |     this.items = reorderedItems; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | .sortable-item { | ||||||
|  |   transition: all .125s; | ||||||
|  | } | ||||||
|  | .sortable-item.is-dragging { | ||||||
|  |   transition-duration: 0s; | ||||||
|  | } | ||||||
|  | @ -1,6 +1 @@ | ||||||
| {{!-- The following component displays Ember's default welcome message. --}} | <RecipeList /> | ||||||
| <WelcomePage /> |  | ||||||
| {{!-- Feel free to remove this! --}} |  | ||||||
| 
 |  | ||||||
| {{outlet}} |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
							
								
								
									
										186
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										186
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							|  | @ -7434,6 +7434,17 @@ | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "ember-concurrency": { | ||||||
|  |       "version": "1.1.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/ember-concurrency/-/ember-concurrency-1.1.3.tgz", | ||||||
|  |       "integrity": "sha512-U/a345q6OjkcRa3ziXHYFD9yB5V8guX68k1EAlLLtbtbswWAawvT/mKiPnhejuENiG6jICEc9AT0IXmVamu1+w==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "ember-cli-babel": "^7.7.3", | ||||||
|  |         "ember-compatibility-helpers": "^1.2.0", | ||||||
|  |         "ember-maybe-import-regenerator": "^0.1.6" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "ember-data": { |     "ember-data": { | ||||||
|       "version": "3.14.1", |       "version": "3.14.1", | ||||||
|       "resolved": "https://registry.npmjs.org/ember-data/-/ember-data-3.14.1.tgz", |       "resolved": "https://registry.npmjs.org/ember-data/-/ember-data-3.14.1.tgz", | ||||||
|  | @ -8078,6 +8089,32 @@ | ||||||
|         "recast": "^0.18.1" |         "recast": "^0.18.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "ember-sortable": { | ||||||
|  |       "version": "2.1.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/ember-sortable/-/ember-sortable-2.1.1.tgz", | ||||||
|  |       "integrity": "sha512-YIPcPbJV7WptI6L4VguHM2dsgeYe66bufMeAgw8GY1anxxY3zUy3RmNfE04BAEF7UCMUHtGRxVYaaZ1vN+cz5g==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "ember-cli-babel": "^7.1.2", | ||||||
|  |         "ember-cli-htmlbars": "^3.0.0", | ||||||
|  |         "ember-test-selectors": "^2.1.0", | ||||||
|  |         "ember-test-waiters": "^1.1.1" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "ember-cli-htmlbars": { | ||||||
|  |           "version": "3.1.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/ember-cli-htmlbars/-/ember-cli-htmlbars-3.1.0.tgz", | ||||||
|  |           "integrity": "sha512-cgvRJM73IT0aePUG7oQ/afB7vSRBV3N0wu9BrWhHX2zkR7A7cUBI7KC9VPk6tbctCXoM7BRGsCC4aIjF7yrfXA==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "broccoli-persistent-filter": "^2.3.1", | ||||||
|  |             "hash-for-dep": "^1.5.1", | ||||||
|  |             "json-stable-stringify": "^1.0.1", | ||||||
|  |             "strip-bom": "^3.0.0" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "ember-source": { |     "ember-source": { | ||||||
|       "version": "https://s3.amazonaws.com/builds.emberjs.com/beta/shas/bdd219f7c716d6a7a4731ca739e04d1dac43a9cd.tgz", |       "version": "https://s3.amazonaws.com/builds.emberjs.com/beta/shas/bdd219f7c716d6a7a4731ca739e04d1dac43a9cd.tgz", | ||||||
|       "integrity": "sha512-xmAcfDXMopogefR2hkpZKwHIVYbV280ibvQhDuJly00Es0wOsyk5m7lSD0oIU9Qai73p51sfH1+5nzUrZL9N3g==", |       "integrity": "sha512-xmAcfDXMopogefR2hkpZKwHIVYbV280ibvQhDuJly00Es0wOsyk5m7lSD0oIU9Qai73p51sfH1+5nzUrZL9N3g==", | ||||||
|  | @ -8242,6 +8279,155 @@ | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "ember-test-selectors": { | ||||||
|  |       "version": "2.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/ember-test-selectors/-/ember-test-selectors-2.1.0.tgz", | ||||||
|  |       "integrity": "sha512-c5HmvefmeABH8hg380TSNZiE9VAK1CBeXWrgyXy+IXHtsew4lZHHw7GnqCAqsakxwvmaMARbAKY9KfSAE91s1g==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "ember-cli-babel": "^6.8.2", | ||||||
|  |         "ember-cli-version-checker": "^3.1.2" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "amd-name-resolver": { | ||||||
|  |           "version": "1.2.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz", | ||||||
|  |           "integrity": "sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "ensure-posix-path": "^1.0.1" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "babel-plugin-debug-macros": { | ||||||
|  |           "version": "0.2.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz", | ||||||
|  |           "integrity": "sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "semver": "^5.3.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "broccoli-babel-transpiler": { | ||||||
|  |           "version": "6.5.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz", | ||||||
|  |           "integrity": "sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "babel-core": "^6.26.0", | ||||||
|  |             "broccoli-funnel": "^2.0.1", | ||||||
|  |             "broccoli-merge-trees": "^2.0.0", | ||||||
|  |             "broccoli-persistent-filter": "^1.4.3", | ||||||
|  |             "clone": "^2.0.0", | ||||||
|  |             "hash-for-dep": "^1.2.3", | ||||||
|  |             "heimdalljs-logger": "^0.1.7", | ||||||
|  |             "json-stable-stringify": "^1.0.0", | ||||||
|  |             "rsvp": "^4.8.2", | ||||||
|  |             "workerpool": "^2.3.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "broccoli-merge-trees": { | ||||||
|  |           "version": "2.0.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz", | ||||||
|  |           "integrity": "sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "broccoli-plugin": "^1.3.0", | ||||||
|  |             "merge-trees": "^1.0.1" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "broccoli-persistent-filter": { | ||||||
|  |           "version": "1.4.6", | ||||||
|  |           "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz", | ||||||
|  |           "integrity": "sha512-0RejLwoC95kv4kta8KAa+FmECJCK78Qgm8SRDEK7YyU0N9Cx6KpY3UCDy9WELl3mCXLN8TokNxc7/hp3lL4lfw==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "async-disk-cache": "^1.2.1", | ||||||
|  |             "async-promise-queue": "^1.0.3", | ||||||
|  |             "broccoli-plugin": "^1.0.0", | ||||||
|  |             "fs-tree-diff": "^0.5.2", | ||||||
|  |             "hash-for-dep": "^1.0.2", | ||||||
|  |             "heimdalljs": "^0.2.1", | ||||||
|  |             "heimdalljs-logger": "^0.1.7", | ||||||
|  |             "mkdirp": "^0.5.1", | ||||||
|  |             "promise-map-series": "^0.2.1", | ||||||
|  |             "rimraf": "^2.6.1", | ||||||
|  |             "rsvp": "^3.0.18", | ||||||
|  |             "symlink-or-copy": "^1.0.1", | ||||||
|  |             "walk-sync": "^0.3.1" | ||||||
|  |           }, | ||||||
|  |           "dependencies": { | ||||||
|  |             "rsvp": { | ||||||
|  |               "version": "3.6.2", | ||||||
|  |               "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", | ||||||
|  |               "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", | ||||||
|  |               "dev": true | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "ember-cli-babel": { | ||||||
|  |           "version": "6.18.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz", | ||||||
|  |           "integrity": "sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "amd-name-resolver": "1.2.0", | ||||||
|  |             "babel-plugin-debug-macros": "^0.2.0-beta.6", | ||||||
|  |             "babel-plugin-ember-modules-api-polyfill": "^2.6.0", | ||||||
|  |             "babel-plugin-transform-es2015-modules-amd": "^6.24.0", | ||||||
|  |             "babel-polyfill": "^6.26.0", | ||||||
|  |             "babel-preset-env": "^1.7.0", | ||||||
|  |             "broccoli-babel-transpiler": "^6.5.0", | ||||||
|  |             "broccoli-debug": "^0.6.4", | ||||||
|  |             "broccoli-funnel": "^2.0.0", | ||||||
|  |             "broccoli-source": "^1.1.0", | ||||||
|  |             "clone": "^2.0.0", | ||||||
|  |             "ember-cli-version-checker": "^2.1.2", | ||||||
|  |             "semver": "^5.5.0" | ||||||
|  |           }, | ||||||
|  |           "dependencies": { | ||||||
|  |             "ember-cli-version-checker": { | ||||||
|  |               "version": "2.2.0", | ||||||
|  |               "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz", | ||||||
|  |               "integrity": "sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg==", | ||||||
|  |               "dev": true, | ||||||
|  |               "requires": { | ||||||
|  |                 "resolve": "^1.3.3", | ||||||
|  |                 "semver": "^5.3.0" | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "merge-trees": { | ||||||
|  |           "version": "1.0.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/merge-trees/-/merge-trees-1.0.1.tgz", | ||||||
|  |           "integrity": "sha1-zL5nRWl4f53vF/1G5lJfVwC70j4=", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "can-symlink": "^1.0.0", | ||||||
|  |             "fs-tree-diff": "^0.5.4", | ||||||
|  |             "heimdalljs": "^0.2.1", | ||||||
|  |             "heimdalljs-logger": "^0.1.7", | ||||||
|  |             "rimraf": "^2.4.3", | ||||||
|  |             "symlink-or-copy": "^1.0.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "rsvp": { | ||||||
|  |           "version": "4.8.5", | ||||||
|  |           "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", | ||||||
|  |           "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", | ||||||
|  |           "dev": true | ||||||
|  |         }, | ||||||
|  |         "workerpool": { | ||||||
|  |           "version": "2.3.3", | ||||||
|  |           "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-2.3.3.tgz", | ||||||
|  |           "integrity": "sha512-L1ovlYHp6UObYqElXXpbd214GgbEKDED0d3sj7pRdFXjNkb2+un/AUcCkceHizO0IVI6SOGGncrcjozruCkRgA==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "object-assign": "4.1.1" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "ember-test-waiters": { |     "ember-test-waiters": { | ||||||
|       "version": "1.1.1", |       "version": "1.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/ember-test-waiters/-/ember-test-waiters-1.1.1.tgz", |       "resolved": "https://registry.npmjs.org/ember-test-waiters/-/ember-test-waiters-1.1.1.tgz", | ||||||
|  |  | ||||||
|  | @ -32,15 +32,16 @@ | ||||||
|     "ember-cli-inject-live-reload": "^2.0.1", |     "ember-cli-inject-live-reload": "^2.0.1", | ||||||
|     "ember-cli-sri": "^2.1.1", |     "ember-cli-sri": "^2.1.1", | ||||||
|     "ember-cli-uglify": "^3.0.0", |     "ember-cli-uglify": "^3.0.0", | ||||||
|  |     "ember-concurrency": "^1.1.3", | ||||||
|     "ember-data": "~3.14.0", |     "ember-data": "~3.14.0", | ||||||
|     "ember-export-application-global": "^2.0.0", |     "ember-export-application-global": "^2.0.0", | ||||||
|     "ember-load-initializers": "^2.0.0", |     "ember-load-initializers": "^2.0.0", | ||||||
|     "ember-maybe-import-regenerator": "^0.1.6", |     "ember-maybe-import-regenerator": "^0.1.6", | ||||||
|     "ember-qunit": "^4.4.1", |     "ember-qunit": "^4.4.1", | ||||||
|     "ember-resolver": "^6.0.0", |     "ember-resolver": "^6.0.0", | ||||||
|  |     "ember-sortable": "^2.1.1", | ||||||
|     "ember-source": "https://s3.amazonaws.com/builds.emberjs.com/beta/shas/bdd219f7c716d6a7a4731ca739e04d1dac43a9cd.tgz", |     "ember-source": "https://s3.amazonaws.com/builds.emberjs.com/beta/shas/bdd219f7c716d6a7a4731ca739e04d1dac43a9cd.tgz", | ||||||
|     "ember-template-lint": "^1.5.0", |     "ember-template-lint": "^1.5.0", | ||||||
|     "ember-welcome-page": "^4.0.0", |  | ||||||
|     "eslint": "^6.1.0", |     "eslint": "^6.1.0", | ||||||
|     "eslint-plugin-ember": "^7.1.0", |     "eslint-plugin-ember": "^7.1.0", | ||||||
|     "eslint-plugin-node": "^10.0.0", |     "eslint-plugin-node": "^10.0.0", | ||||||
|  |  | ||||||
							
								
								
									
										26
									
								
								tests/integration/components/recipe-list-test.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								tests/integration/components/recipe-list-test.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | ||||||
|  | import { module, test } from 'qunit'; | ||||||
|  | import { setupRenderingTest } from 'ember-qunit'; | ||||||
|  | import { render } from '@ember/test-helpers'; | ||||||
|  | import { hbs } from 'ember-cli-htmlbars'; | ||||||
|  | 
 | ||||||
|  | module('Integration | Component | recipe-list', function(hooks) { | ||||||
|  |   setupRenderingTest(hooks); | ||||||
|  | 
 | ||||||
|  |   test('it renders', async function(assert) { | ||||||
|  |     // Set any properties with this.set('myProperty', 'value');
 | ||||||
|  |     // Handle any actions with this.set('myAction', function(val) { ... });
 | ||||||
|  | 
 | ||||||
|  |     await render(hbs`<RecipeList />`); | ||||||
|  | 
 | ||||||
|  |     assert.equal(this.element.textContent.trim(), ''); | ||||||
|  | 
 | ||||||
|  |     // Template block usage:
 | ||||||
|  |     await render(hbs` | ||||||
|  |       <RecipeList> | ||||||
|  |         template block text | ||||||
|  |       </RecipeList> | ||||||
|  |     `);
 | ||||||
|  | 
 | ||||||
|  |     assert.equal(this.element.textContent.trim(), 'template block text'); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Jo Wroten
						Jo Wroten