Skip to content

Commit c67ba93

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

File tree

2 files changed

+67
-1
lines changed

2 files changed

+67
-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

+60-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';
@@ -274,4 +274,63 @@ module('Integration | Helper | file-queue', function (hooks) {
274274
await settled();
275275
assert.dom('[data-test-file]').doesNotExist('queue was flushed');
276276
});
277+
278+
// Service before helper issue ref: https://github.com/adopted-ember-addons/ember-file-upload/issues/1085
279+
test('service can be used before helper with DEFUALT_QUEUE', async function (assert) {
280+
const fileQueueService = this.owner.lookup(
281+
'service:file-queue',
282+
) as FileQueueService;
283+
284+
await render(
285+
<template>
286+
{{fileQueue}}
287+
288+
<ul>
289+
{{#each fileQueueService.files as |file|}}
290+
<li>
291+
{{file.name}}
292+
</li>
293+
{{/each}}
294+
</ul>
295+
296+
{{#let (fileQueue) as |queue|}}
297+
<label>
298+
<input type='file' {{queue.selectFile}} hidden />
299+
Select File
300+
</label>
301+
{{/let}}
302+
</template>,
303+
);
304+
305+
assert.dom('label').exists('regression would throw during rendering');
306+
});
307+
308+
test('service can be used before helper with named queue, provided FileQueueService.create is called first', async function (assert) {
309+
const fileQueueService = this.owner.lookup(
310+
'service:file-queue',
311+
) as FileQueueService;
312+
const customName = 'uploads';
313+
fileQueueService.create(customName);
314+
315+
await render(
316+
<template>
317+
<ul>
318+
{{#each fileQueueService.files as |file|}}
319+
<li>
320+
{{file.name}}
321+
</li>
322+
{{/each}}
323+
</ul>
324+
325+
{{#let (fileQueue name=customName) as |queue|}}
326+
<label>
327+
<input type='file' {{queue.selectFile}} hidden />
328+
Select File
329+
</label>
330+
{{/let}}
331+
</template>,
332+
);
333+
334+
assert.dom('label').exists('regression would throw during rendering');
335+
});
277336
});

0 commit comments

Comments
 (0)