diff --git a/app/components/form/element.hbs b/app/components/form/element.hbs index f2e39d5..c1c75c1 100644 --- a/app/components/form/element.hbs +++ b/app/components/form/element.hbs @@ -3,7 +3,7 @@ diff --git a/app/components/task-toast.hbs b/app/components/task-toast.hbs new file mode 100644 index 0000000..7615204 --- /dev/null +++ b/app/components/task-toast.hbs @@ -0,0 +1,22 @@ + + {{#if this.icon}} +
+ +
+ {{/if}} + +
+
Task {{this.taskType}} Uid:{{this.taskUid}}
+ Status: {{this.taskStatus}} +
+ + +
diff --git a/app/components/task-toast.js b/app/components/task-toast.js new file mode 100644 index 0000000..fd94574 --- /dev/null +++ b/app/components/task-toast.js @@ -0,0 +1,84 @@ +import Component from '@glimmer/component'; +import { registerDestructor } from '@ember/destroyable'; +import { action } from '@ember/object'; +import { inject as service } from '@ember/service'; +import { tracked } from '@glimmer/tracking'; +import { Loading, Check, AlertOctagonOutline } from 'ember-mdi'; + +export default class TaskToastComponent extends Component { + @service meilisearch; + + @tracked task; + + constructor(owner, args) { + super(owner, args); + + this.interval = setInterval(this.reloadTask, 1000); + + registerDestructor(this, this.clearInterval); + } + + get icon() { + switch (this.taskStatus) { + case 'enqueued': + return Loading; + case 'succeeded': + return Check; + case 'failed': + return AlertOctagonOutline; + default: + return null; + } + } + + get color() { + switch (this.taskStatus) { + case 'enqueued': + return 'text-info'; + case 'succeeded': + return 'text-success'; + case 'failed': + return 'text-danger'; + default: + return null; + } + } + + get isEnqueued() { + return this.taskStatus === 'enqueued'; + } + + get isFailed() { + return this.taskStatus === 'failed'; + } + + get isSucceeded() { + return this.taskStatus === 'succeeded'; + } + + get taskUid() { + return this.task?.taskUid ?? this.args.task.taskUid; + } + + get taskType() { + return this.task?.type ?? this.args.task.type; + } + + get taskStatus() { + return this.task?.status ?? this.args.task.status; + } + + @action + reloadTask() { + this.meilisearch.getTask(this.taskUid).then((task) => { + this.task = task; + }); + } + + @action + clearInterval() { + if (this.interval) { + clearInterval(this.interval); + } + } +} diff --git a/app/controllers/admin/indexes/item/edit.js b/app/controllers/admin/indexes/item/edit.js index 8afec84..991e287 100644 --- a/app/controllers/admin/indexes/item/edit.js +++ b/app/controllers/admin/indexes/item/edit.js @@ -7,15 +7,15 @@ export default class AdminIndexesItemEditController extends Controller { @service toasts; @action - save(event) { + async save(event) { event.preventDefault(); - // const formData = new FormData(event.currentTarget); - // const data = Object.fromEntries(formData.entries()); + const formData = new FormData(event.currentTarget); + const data = Object.fromEntries(formData.entries()); - // this.model.save(data); + const task = await this.model.save(data); - this.toasts.successToast({ text: 'Hello World!' }); + this.toasts.taskToast(task); } @action diff --git a/app/services/toasts.js b/app/services/toasts.js index a1bb947..dade19a 100644 --- a/app/services/toasts.js +++ b/app/services/toasts.js @@ -2,6 +2,7 @@ import Service from '@ember/service'; import { tracked } from '@glimmer/tracking'; import { hbs } from 'ember-template-imports'; import SuccessToast from '../components/success-toast'; +import TaskToast from '../components/task-toast'; export default class ToastsService extends Service { @tracked container = []; @@ -25,6 +26,16 @@ export default class ToastsService extends Service { this.container = this.container.concat([wrapper]); } + taskToast(task) { + const onClose = () => { + this.container = this.container.filter((item) => item !== wrapper); + }; + + const wrapper = hbs``; + + this.container = this.container.concat([wrapper]); + } + add(toast) { this.queue = this.queue.concat(toast); } diff --git a/app/templates/admin/indexes/item/edit.hbs b/app/templates/admin/indexes/item/edit.hbs index e2707cb..130ec11 100644 --- a/app/templates/admin/indexes/item/edit.hbs +++ b/app/templates/admin/indexes/item/edit.hbs @@ -17,7 +17,3 @@