Add json view
This commit is contained in:
parent
2d27587f88
commit
5d647ff4de
3 changed files with 97 additions and 75 deletions
|
|
@ -40,7 +40,7 @@ export default class ButtonComponent extends Component {
|
|||
<this.icon
|
||||
@spin={{this.isPending}}
|
||||
@size={{get iconSizes this.size}}
|
||||
class="mr-1"
|
||||
class={{if this.text "mr-1"}}
|
||||
/>
|
||||
{{/if}}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import Controller from '@ember/controller';
|
||||
import { action } from '@ember/object';
|
||||
import { tracked } from '@glimmer/tracking';
|
||||
import { Magnify, Table, MapOutline } from 'ember-mdi';
|
||||
import { Magnify, Table, /* MapOutline, */ CodeJson } from 'ember-mdi';
|
||||
|
||||
export default class AdminIndexesItemDocumentsIndexController extends Controller {
|
||||
@tracked q = null;
|
||||
|
|
@ -19,7 +19,7 @@ export default class AdminIndexesItemDocumentsIndexController extends Controller
|
|||
// key: view name, value: icon
|
||||
views = {
|
||||
table: Table,
|
||||
map: MapOutline,
|
||||
json: CodeJson,
|
||||
};
|
||||
|
||||
get attributes() {
|
||||
|
|
|
|||
|
|
@ -60,81 +60,103 @@
|
|||
</div> --}}
|
||||
|
||||
{{#if (gt @model.data.estimatedTotalHits 0)}}
|
||||
<SimpleTable
|
||||
@data={{@model.data.hits}}
|
||||
@sortingProp={{this.sort}}
|
||||
@onSort={{this.onSort}}
|
||||
class='w-full'
|
||||
as |Column data|
|
||||
>
|
||||
{{#let
|
||||
(array @model.index.uid (get data @model.index.primaryKey))
|
||||
as |models|
|
||||
}}
|
||||
{{#each this.attributes as |field|}}
|
||||
{{#if (not (includes field this.hiddenFields))}}
|
||||
<Column
|
||||
@name={{capitalize field}}
|
||||
@prop={{field}}
|
||||
@sortable={{includes field @model.sortableAttributes}}
|
||||
>
|
||||
{{#let (get data field) as |value|}}
|
||||
{{#if (eq @model.index.primaryKey field)}}
|
||||
<div class='mb-4'>
|
||||
{{#each-in this.views as |key icon|}}
|
||||
<Button
|
||||
@icon={{icon}}
|
||||
class='w-auto'
|
||||
@onClick={{set this 'dataView'}}
|
||||
@value={{key}}
|
||||
/>
|
||||
{{/each-in}}
|
||||
</div>
|
||||
|
||||
{{#if (eq this.dataView 'table')}}
|
||||
<SimpleTable
|
||||
@data={{@model.data.hits}}
|
||||
@sortingProp={{this.sort}}
|
||||
@onSort={{this.onSort}}
|
||||
class='w-full'
|
||||
as |Column data|
|
||||
>
|
||||
{{#let
|
||||
(array @model.index.uid (get data @model.index.primaryKey))
|
||||
as |models|
|
||||
}}
|
||||
{{#each this.attributes as |field|}}
|
||||
{{#if (not (includes field this.hiddenFields))}}
|
||||
<Column
|
||||
@name={{capitalize field}}
|
||||
@prop={{field}}
|
||||
@sortable={{includes field @model.sortableAttributes}}
|
||||
>
|
||||
{{#let (get data field) as |value|}}
|
||||
{{#if (eq @model.index.primaryKey field)}}
|
||||
<LinkTo
|
||||
@route='admin.indexes.item.documents.document'
|
||||
@models={{models}}
|
||||
>{{value}}</LinkTo>
|
||||
{{else if (eq (type-of value) 'object')}}
|
||||
{{json-stringify value}}
|
||||
{{else}}
|
||||
{{value}}
|
||||
{{/if}}
|
||||
{{/let}}
|
||||
</Column>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
<Column class='relative'>
|
||||
{{#let
|
||||
'flex items-center px-4 py-2 text-inherit no-underline text-sm hover:bg-base-6 hover:text-base-1'
|
||||
as |linkClasses|
|
||||
}}
|
||||
<Menu as |menu|>
|
||||
<menu.Button class='inline-flex items-center'>
|
||||
<Icons::DotsHorizontal />
|
||||
</menu.Button>
|
||||
<menu.Items
|
||||
class='absolute z-dropdown right-0 w-28 mt-2 py-1 origin-top-right bg-base-7 border rounded shadow-sm outline-none'
|
||||
>
|
||||
<LinkTo
|
||||
@route='admin.indexes.item.documents.document'
|
||||
@models={{models}}
|
||||
>{{value}}</LinkTo>
|
||||
{{else if (eq (type-of value) 'object')}}
|
||||
{{json-stringify value}}
|
||||
{{else}}
|
||||
{{value}}
|
||||
{{/if}}
|
||||
{{/let}}
|
||||
</Column>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
<Column class='relative'>
|
||||
{{#let
|
||||
'flex items-center px-4 py-2 text-inherit no-underline text-sm hover:bg-base-6 hover:text-base-1'
|
||||
as |linkClasses|
|
||||
}}
|
||||
<Menu as |menu|>
|
||||
<menu.Button class='inline-flex items-center'>
|
||||
<Icons::DotsHorizontal />
|
||||
</menu.Button>
|
||||
<menu.Items
|
||||
class='absolute z-dropdown right-0 w-28 mt-2 py-1 origin-top-right bg-base-7 border rounded shadow-sm outline-none'
|
||||
>
|
||||
<LinkTo
|
||||
@route='admin.indexes.item.documents.document'
|
||||
@models={{models}}
|
||||
class={{linkClasses}}
|
||||
>
|
||||
<Icons::FileDocumentOutline @size={{18}} class='mr-1' />
|
||||
View
|
||||
</LinkTo>
|
||||
<LinkTo
|
||||
@route='admin.indexes.item.documents.document.edit'
|
||||
@models={{models}}
|
||||
class={{linkClasses}}
|
||||
>
|
||||
<Icons::PencilOutline @size={{18}} class='mr-1' />
|
||||
Edit
|
||||
</LinkTo>
|
||||
<LinkTo
|
||||
@route='admin.indexes.item.documents.document.delete'
|
||||
@models={{models}}
|
||||
class={{linkClasses}}
|
||||
>
|
||||
<Icons::TrashCanOutline @size={{18}} class='mr-1' />
|
||||
Delete
|
||||
</LinkTo>
|
||||
</menu.Items>
|
||||
</Menu>
|
||||
{{/let}}
|
||||
</Column>
|
||||
{{/let}}
|
||||
</SimpleTable>
|
||||
class={{linkClasses}}
|
||||
>
|
||||
<Icons::FileDocumentOutline @size={{18}} class='mr-1' />
|
||||
View
|
||||
</LinkTo>
|
||||
<LinkTo
|
||||
@route='admin.indexes.item.documents.document.edit'
|
||||
@models={{models}}
|
||||
class={{linkClasses}}
|
||||
>
|
||||
<Icons::PencilOutline @size={{18}} class='mr-1' />
|
||||
Edit
|
||||
</LinkTo>
|
||||
<LinkTo
|
||||
@route='admin.indexes.item.documents.document.delete'
|
||||
@models={{models}}
|
||||
class={{linkClasses}}
|
||||
>
|
||||
<Icons::TrashCanOutline @size={{18}} class='mr-1' />
|
||||
Delete
|
||||
</LinkTo>
|
||||
</menu.Items>
|
||||
</Menu>
|
||||
{{/let}}
|
||||
</Column>
|
||||
{{/let}}
|
||||
</SimpleTable>
|
||||
{{else if (eq this.dataView 'json')}}
|
||||
{{#each @model.data.hits as |item|}}
|
||||
<MonacoEditor
|
||||
@value={{json-stringify item}}
|
||||
@language='json'
|
||||
@readOnly={{true}}
|
||||
class='mb-4'
|
||||
/>
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
|
||||
<div class='flex items-center'>
|
||||
{{this.fromHits}}
|
||||
|
|
|
|||
Loading…
Reference in a new issue