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 @@
-
-{{!-- {{#unless this.show}}
-
-{{/unless}} --}}
diff --git a/app/templates/login.hbs b/app/templates/login.hbs
index f7f880c..cd112e3 100644
--- a/app/templates/login.hbs
+++ b/app/templates/login.hbs
@@ -26,7 +26,7 @@
/>
{{#if this.errorMessage}}
-
+
{{this.errorMessage}}
{{/if}}
diff --git a/config/tailwind.config.js b/config/tailwind.config.js
index 7b4dfae..73af661 100644
--- a/config/tailwind.config.js
+++ b/config/tailwind.config.js
@@ -23,21 +23,26 @@ module.exports = {
DEFAULT: colors.pink['500'],
dark: colors.pink['800'],
},
- yellow: {
- light: colors.yellow['100'],
- DEFAULT: colors.yellow['400'],
- dark: colors.yellow['700'],
- },
- green: {
+ success: {
light: colors.green['100'],
DEFAULT: colors.green['400'],
dark: colors.green['800'],
},
- red: {
+ danger: {
light: colors.red['100'],
DEFAULT: colors.red['500'],
dark: colors.red['800'],
},
+ warning: {
+ light: colors.yellow['100'],
+ DEFAULT: colors.yellow['400'],
+ dark: colors.yellow['700'],
+ },
+ info: {
+ light: colors.blue['100'],
+ DEFAULT: colors.blue['400'],
+ dark: colors.blue['700'],
+ },
},
zIndex: {
'scroll-link': '10',
diff --git a/tests/integration/components/task-toast-test.js b/tests/integration/components/task-toast-test.js
new file mode 100644
index 0000000..9983d76
--- /dev/null
+++ b/tests/integration/components/task-toast-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'meiliadmin/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | task-toast', 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``);
+
+ assert.dom(this.element).hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom(this.element).hasText('template block text');
+ });
+});