Skip to content

Commit deedc3e

Browse files
MichalBryxigilest
authored andcommitted
Propose a partial fix to #1085
1 parent 2d12346 commit deedc3e

File tree

2 files changed

+92
-1
lines changed

2 files changed

+92
-1
lines changed

ember-file-upload/src/services/file-queue.ts

+7
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ export default class FileQueueService extends Service {
2626
*/
2727
#queues: Map<QueueName, Queue> = new Map();
2828

29+
constructor() {
30+
super();
31+
// Create default queue the first time this service is accessed and instantiated
32+
// Helps to avoid backtracking re-render issues
33+
this.create(DEFAULT_QUEUE);
34+
}
35+
2936
/**
3037
* Returns a queue with the given name
3138
*

test-app/tests/integration/helpers/file-queue-helper-test.gts

+85-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { render, click, settled, waitFor } from '@ember/test-helpers';
55
import { DEFAULT_QUEUE, FileState } from 'ember-file-upload';
66
import type { UploadFile } from 'ember-file-upload';
77
import { selectFiles } from 'ember-file-upload/test-support';
8-
import { uploadHandler } from 'ember-file-upload';
8+
import { type FileQueueService, uploadHandler } from 'ember-file-upload';
99
import { later } from '@ember/runloop';
1010
import fileQueue from 'ember-file-upload/helpers/file-queue';
1111
import { on } from '@ember/modifier';
@@ -20,6 +20,31 @@ module('Integration | Helper | file-queue', function (hooks) {
2020
setupRenderingTest(hooks);
2121
setupMirage(hooks);
2222

23+
test('service can be used before helper', async function (assert) {
24+
const fileQueueService = this.owner.lookup(
25+
'service:file-queue',
26+
) as FileQueueService;
27+
28+
await render(
29+
<template>
30+
<ul>
31+
{{#each fileQueueService.files as |file|}}
32+
<li>
33+
{{file.name}}
34+
</li>
35+
{{/each}}
36+
</ul>
37+
38+
{{#let (fileQueue) as |queue|}}
39+
<label>
40+
<input type='file' {{queue.selectFile}} hidden />
41+
Select File
42+
</label>
43+
{{/let}}
44+
</template>,
45+
);
46+
});
47+
2348
test('filter is triggered when selecting files', async function (assert) {
2449
const filter = (file: File) => {
2550
assert.step(`filter: ${file.name}`);
@@ -274,4 +299,63 @@ module('Integration | Helper | file-queue', function (hooks) {
274299
await settled();
275300
assert.dom('[data-test-file]').doesNotExist('queue was flushed');
276301
});
302+
303+
// Service before helper issue ref: https://github.com/adopted-ember-addons/ember-file-upload/issues/1085
304+
test('service can be used before helper with DEFUALT_QUEUE', async function (assert) {
305+
const fileQueueService = this.owner.lookup(
306+
'service:file-queue',
307+
) as FileQueueService;
308+
309+
await render(
310+
<template>
311+
{{fileQueue}}
312+
313+
<ul>
314+
{{#each fileQueueService.files as |file|}}
315+
<li>
316+
{{file.name}}
317+
</li>
318+
{{/each}}
319+
</ul>
320+
321+
{{#let (fileQueue) as |queue|}}
322+
<label>
323+
<input type='file' {{queue.selectFile}} hidden />
324+
Select File
325+
</label>
326+
{{/let}}
327+
</template>,
328+
);
329+
330+
assert.dom('label').exists('regression would throw during rendering');
331+
});
332+
333+
test('service can be used before helper with named queue, provided FileQueueService.create is called first', async function (assert) {
334+
const fileQueueService = this.owner.lookup(
335+
'service:file-queue',
336+
) as FileQueueService;
337+
const customName = 'uploads';
338+
fileQueueService.create(customName);
339+
340+
await render(
341+
<template>
342+
<ul>
343+
{{#each fileQueueService.files as |file|}}
344+
<li>
345+
{{file.name}}
346+
</li>
347+
{{/each}}
348+
</ul>
349+
350+
{{#let (fileQueue name=customName) as |queue|}}
351+
<label>
352+
<input type='file' {{queue.selectFile}} hidden />
353+
Select File
354+
</label>
355+
{{/let}}
356+
</template>,
357+
);
358+
359+
assert.dom('label').exists('regression would throw during rendering');
360+
});
277361
});

0 commit comments

Comments
 (0)