Add form for all setting of an index

This commit is contained in:
Stanislav Romanov 2022-10-12 16:34:08 +03:00
parent bb0069445a
commit 825d7caaa3
12 changed files with 71 additions and 14 deletions

View file

@ -1,5 +1,5 @@
<div class='mb-4'>
<Form::Element @label={{namelize @name}} @errors={{array this.error}}>
<Form::Element @label={{@label}} @errors={{array this.error}}>
<MonacoEditor
@value={{json-stringify this.value}}
@language='json'

View file

@ -24,7 +24,7 @@ export default class FormIndexSettingComponent extends Component {
try {
return this.args.index
.updateSetting(this.args.name, JSON.parse(newValue))
.updateSetting(JSON.parse(newValue), this.args.name)
.then(this.toaster.taskToast);
} catch (error) {
this.error = error.error || error;

View file

@ -1,6 +1,6 @@
<LinkTo
@route={{@route}}
@models={{if @model (array @model) @models}}
@models={{if @model (array @model) (if @models @models (array))}}
@activeClass="text-primary border-b border-primary"
class="flex items-center h-10 px-4 py-2 text-center text-base-2 no-underline bg-transparent whitespace-nowrap focus:outline-none"
>

View file

@ -86,22 +86,42 @@ export default class Index {
}
getSetting(name) {
return query(`${this.path}/settings/${dasherize(name)}`);
let url = `${this.path}/settings`;
if (name) {
url = `${url}/${dasherize(name)}`;
}
return query(url);
}
updateSetting(name, value) {
const method = ['faceting', 'pagination', 'typo-tolerance'].includes(name)
? 'PATCH'
: 'PUT';
updateSetting(value, name) {
const method =
name === undefined ||
['faceting', 'pagination', 'typo-tolerance'].includes(name)
? 'PATCH'
: 'PUT';
return query(`${this.path}/settings/${dasherize(name)}`, {
let url = `${this.path}/settings`;
if (name) {
url = `${url}/${dasherize(name)}`;
}
return query(url, {
method: method,
body: JSON.stringify(value),
});
}
resetSetting(name) {
return query(`${this.path}/settings/${dasherize(name)}`, {
let url = `${this.path}/settings`;
if (name) {
url = `${url}/${dasherize(name)}`;
}
return query(url, {
method: 'DELETE',
});
}

View file

@ -10,7 +10,9 @@ Router.map(function () {
this.route('admin', function () {
this.route('indexes', function () {
this.route('item', { path: '/:index_uid' }, function () {
this.route('settings');
this.route('settings', function () {
this.route('specific');
});
this.route('info');
this.route('edit');
this.route('documents', function () {

View file

@ -0,0 +1,3 @@
import Route from '@ember/routing/route';
export default class AdminIndexesItemSettingsIndexRoute extends Route {}

View file

@ -0,0 +1,3 @@
import Route from '@ember/routing/route';
export default class AdminIndexesItemSettingsSpecificRoute extends Route {}

View file

@ -1,3 +1,6 @@
{{#each @model.settingNames as |name|}}
<IndexSetting @name={{name}} @index={{@model}} />
{{/each}}
<Tabs>
<Tab @route="admin.indexes.item.settings.index" @text="All" />
<Tab @route="admin.indexes.item.settings.specific" @text="Specific" />
</Tabs>
{{outlet}}

View file

@ -0,0 +1 @@
<IndexSetting @index={{@model}} />

View file

@ -0,0 +1,3 @@
{{#each @model.settingNames as |name|}}
<IndexSetting @name={{name}} @label={{namelize name}} @index={{@model}} />
{{/each}}

View file

@ -0,0 +1,11 @@
import { module, test } from 'qunit';
import { setupTest } from 'meiliadmin/tests/helpers';
module('Unit | Route | admin/indexes/item/settings/index', function (hooks) {
setupTest(hooks);
test('it exists', function (assert) {
let route = this.owner.lookup('route:admin/indexes/item/settings/index');
assert.ok(route);
});
});

View file

@ -0,0 +1,11 @@
import { module, test } from 'qunit';
import { setupTest } from 'meiliadmin/tests/helpers';
module('Unit | Route | admin/indexes/item/settings/specific', function (hooks) {
setupTest(hooks);
test('it exists', function (assert) {
let route = this.owner.lookup('route:admin/indexes/item/settings/specific');
assert.ok(route);
});
});