Files
lucent-laravel/front/js/svelte/records/elements/ReferenceInlineButtons.svelte
T

114 lines
3.1 KiB
Svelte
Raw Normal View History

2023-10-02 23:10:49 +03:00
<script>
2023-10-07 21:18:18 +03:00
import {createEventDispatcher, getContext} from "svelte";
2023-10-02 23:10:49 +03:00
import Icon from "../../common/Icon.svelte";
import InlineEdit from "../InlineEdit.svelte";
2024-08-16 14:34:39 +03:00
import Dialog from "../../dialog/Dialog.svelte";
2024-08-17 19:23:19 +03:00
import DialogRecord from "../../dialog/DialogRecord.svelte";
import axios from "axios";
2024-08-18 19:04:32 +03:00
import Dropdown from "../../common/Dropdown.svelte";
2023-10-02 23:10:49 +03:00
const dispatch = createEventDispatcher();
2023-10-07 21:18:18 +03:00
const channel = getContext("channel");
2023-10-02 23:10:49 +03:00
export let schemas;
export let recordId;
let browseModal;
2024-08-17 19:23:19 +03:00
let dialogRecord;
2023-10-02 23:10:49 +03:00
let inLineCreateRecord;
function openBrowseModal(e, schema) {
e.preventDefault();
browseModal.open(schema);
}
function save(e) {
e.preventDefault();
console.log("Save inline");
inLineCreateRecord = null;
2024-08-17 19:23:19 +03:00
dialogRecord.close()
2023-10-02 23:10:49 +03:00
dispatch("save", {
records: e.detail.records,
after: recordId,
});
}
function insert(e) {
e.preventDefault();
browseModal.close();
dispatch("insert", {
records: e.detail.records,
2024-08-19 17:48:10 +03:00
schema: e.detail.schema,
2023-10-02 23:10:49 +03:00
after: recordId,
});
}
function createInlineReference(e, schemaUId) {
e.preventDefault();
axios
2023-10-07 21:18:18 +03:00
.get(channel.lucentUrl + "/records/newInline?schema=" + schemaUId)
2023-10-02 23:10:49 +03:00
.then((response) => {
inLineCreateRecord = response.data;
2024-08-17 19:23:19 +03:00
dialogRecord.open()
2023-10-02 23:10:49 +03:00
})
.catch((error) => {
console.log(error);
});
}
</script>
{#if schemas.length > 1}
2024-08-18 19:04:32 +03:00
<div
style="display: flex;align-items: center;gap:4px"
2023-10-02 23:10:49 +03:00
>
2024-08-18 19:04:32 +03:00
{#each schemas as schema}
<Dropdown>
<div slot="button" class:is-first={!recordId}>
{schema.label}
2023-10-02 23:10:49 +03:00
</div>
2024-08-18 19:04:32 +03:00
<button
class=" button"
on:click={(e) =>
createInlineReference(e, schema.name)}
>Create New Record
</button>
<button
class="button"
on:click={(e) => openBrowseModal(e, schema.name)}
>
<Icon icon="magnifying-glass"/>
Search
</button
>
</Dropdown>
{/each}
</div>
2023-10-02 23:10:49 +03:00
{:else}
2024-08-16 16:00:48 +03:00
<div style="display:flex;align-items: center;gap: 4px">
2024-08-17 19:23:19 +03:00
<button
class="button"
on:click={(e) => createInlineReference(e, schemas[0].name)}
>New
</button>
<button
class="button"
on:click={(e) => openBrowseModal(e, schemas[0].name)}
>
<Icon icon="magnifying-glass"/>
</button
>
2023-10-02 23:10:49 +03:00
</div>
{/if}
2024-08-17 19:23:19 +03:00
<DialogRecord bind:this={dialogRecord}>
{#if inLineCreateRecord}
2023-10-07 21:18:18 +03:00
2024-08-17 19:23:19 +03:00
<InlineEdit
{...inLineCreateRecord}
on:cancel={(e) => (inLineCreateRecord = null)}
on:inlinesaved={save}
/>
2023-10-07 21:18:18 +03:00
2024-08-17 19:23:19 +03:00
{/if}
</DialogRecord>
2023-10-02 23:10:49 +03:00
2024-08-17 19:23:19 +03:00
<Dialog bind:this={browseModal} on:insert={insert}/>