diff --git a/app/components/stat.hbs b/app/components/stat.hbs new file mode 100644 index 0000000..31b9326 --- /dev/null +++ b/app/components/stat.hbs @@ -0,0 +1,15 @@ +
+
+ {{@title}} +
+
+ {{#if (has-block)}} + {{yield}} + {{else}} + {{@value}} + {{/if}} +
+
diff --git a/app/helpers/date-time-format.js b/app/helpers/date-time-format.js new file mode 100644 index 0000000..ac10323 --- /dev/null +++ b/app/helpers/date-time-format.js @@ -0,0 +1,11 @@ +import { helper } from '@ember/component/helper'; + +export default helper(function dateTimeFormat([date], named) { + if (typeof date === 'string') { + date = new Date(date); + } + + const formatter = new Intl.DateTimeFormat(window.navigator.language, named); + + return formatter.format(date); +}); diff --git a/app/helpers/format-bytes.js b/app/helpers/format-bytes.js new file mode 100644 index 0000000..9e75f25 --- /dev/null +++ b/app/helpers/format-bytes.js @@ -0,0 +1,11 @@ +import { helper } from '@ember/component/helper'; + +export default helper(function formatBytes([bytes, decimals] /*, named*/) { + if (bytes == 0) return '0 Bytes'; + let k = 1024, + dm = decimals || 2, + sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], + i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; +}); diff --git a/app/routes/admin.js b/app/routes/admin.js index 6269040..9292977 100644 --- a/app/routes/admin.js +++ b/app/routes/admin.js @@ -1,6 +1,5 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; -import { hash } from 'rsvp'; export default class AdminRoute extends Route { @service meilisearch; @@ -11,10 +10,6 @@ export default class AdminRoute extends Route { } async model() { - return hash({ - indexes: this.meilisearch.getIndexes(), - health: this.meilisearch.getHealth(), - version: this.meilisearch.getVersion(), - }); + return this.meilisearch.getIndexes(); } } diff --git a/app/routes/admin/index.js b/app/routes/admin/index.js new file mode 100644 index 0000000..ac5f2f3 --- /dev/null +++ b/app/routes/admin/index.js @@ -0,0 +1,16 @@ +import Route from '@ember/routing/route'; +import { inject as service } from '@ember/service'; +import { hash } from 'rsvp'; + +export default class AdminIndexRoute extends Route { + @service meilisearch; + @service session; + + async model() { + return hash({ + health: this.meilisearch.getHealth(), + version: this.meilisearch.getVersion(), + stats: this.meilisearch.getStats(), + }); + } +} diff --git a/app/routes/index.js b/app/routes/index.js index cba3815..e6639cd 100644 --- a/app/routes/index.js +++ b/app/routes/index.js @@ -5,6 +5,6 @@ export default class IndexRoute extends Route { @service router; beforeModel() { - this.router.transitionTo('admin.indexes'); + this.router.transitionTo('admin'); } } diff --git a/app/services/meilisearch.js b/app/services/meilisearch.js index 6f2702f..c0e7443 100644 --- a/app/services/meilisearch.js +++ b/app/services/meilisearch.js @@ -16,4 +16,8 @@ export default class MeilisearchService extends Service { getVersion() { return query('version'); } + + getStats() { + return query('stats'); + } } diff --git a/app/templates/admin.hbs b/app/templates/admin.hbs index 40c06c6..93e0353 100644 --- a/app/templates/admin.hbs +++ b/app/templates/admin.hbs @@ -14,7 +14,7 @@ }} {{/let}} -
- v{{@model.version.pkgVersion}} - {{#if (eq @model.health.status 'available')}} - - {{else}} - - {{/if}} -
diff --git a/app/templates/admin/index.hbs b/app/templates/admin/index.hbs new file mode 100644 index 0000000..808731d --- /dev/null +++ b/app/templates/admin/index.hbs @@ -0,0 +1,24 @@ +
+ +
+ {{#if (eq @model.health.status 'available')}} + + {{else}} + + {{/if}} + {{capitalize @model.health.status}} +
+
+ + + +
diff --git a/tests/integration/components/stat-test.js b/tests/integration/components/stat-test.js new file mode 100644 index 0000000..ccaa57f --- /dev/null +++ b/tests/integration/components/stat-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 | stat', 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'); + }); +}); diff --git a/tests/integration/helpers/date-time-format-test.js b/tests/integration/helpers/date-time-format-test.js new file mode 100644 index 0000000..6051a48 --- /dev/null +++ b/tests/integration/helpers/date-time-format-test.js @@ -0,0 +1,17 @@ +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 | Helper | DateTimeFormat', function (hooks) { + setupRenderingTest(hooks); + + // TODO: Replace this with your real tests. + test('it renders', async function (assert) { + this.set('inputValue', '1234'); + + await render(hbs`{{date-time-format this.inputValue}}`); + + assert.dom(this.element).hasText('1234'); + }); +}); diff --git a/tests/integration/helpers/format-bytes-test.js b/tests/integration/helpers/format-bytes-test.js new file mode 100644 index 0000000..5f7f674 --- /dev/null +++ b/tests/integration/helpers/format-bytes-test.js @@ -0,0 +1,17 @@ +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 | Helper | formatBytes', function (hooks) { + setupRenderingTest(hooks); + + // TODO: Replace this with your real tests. + test('it renders', async function (assert) { + this.set('inputValue', '1234'); + + await render(hbs`{{format-bytes this.inputValue}}`); + + assert.dom(this.element).hasText('1234'); + }); +}); diff --git a/tests/unit/routes/admin/index-test.js b/tests/unit/routes/admin/index-test.js new file mode 100644 index 0000000..18f1975 --- /dev/null +++ b/tests/unit/routes/admin/index-test.js @@ -0,0 +1,11 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'meiliadmin/tests/helpers'; + +module('Unit | Route | admin/index', function (hooks) { + setupTest(hooks); + + test('it exists', function (assert) { + let route = this.owner.lookup('route:admin/index'); + assert.ok(route); + }); +});