Files

124 lines
4.0 KiB
Svelte
Raw Permalink Normal View History

2024-08-15 22:11:26 +03:00
<script>
import Icon from "../../common/Icon.svelte";
import {createEventDispatcher, getContext} from "svelte";
import Preview from "../../files/Preview.svelte";
import {previewTitle} from "./../Preview";
2024-08-25 14:23:20 +03:00
import {fileurl, htmlurl} from "../../files/imageserver.js"
2024-08-15 22:11:26 +03:00
import Status from "./../Status.svelte";
2024-08-18 17:23:18 +03:00
import Dropdown from "../../common/Dropdown.svelte";
2024-08-15 22:11:26 +03:00
const dispatch = createEventDispatcher();
const channel = getContext("channel");
export let record;
2024-10-05 15:19:53 +03:00
export let edge;
2024-08-15 22:11:26 +03:00
export let hasDelete = false;
2024-08-18 17:23:18 +03:00
export let hasInsert = false;
2024-08-15 22:11:26 +03:00
let schema = channel.schemas.find((aschema) => aschema.name === record.schema);
let cardTitle = previewTitle(channel.schemas, record);
2024-08-18 17:23:18 +03:00
let imagePresets = Object.keys(channel.imageFilters);
2024-08-15 22:11:26 +03:00
function remove(e) {
e.preventDefault();
dispatch("remove", record.id);
}
2024-08-18 17:23:18 +03:00
2024-10-05 15:19:53 +03:00
function restore(e) {
e.preventDefault();
dispatch("restore", record.id);
}
function fullDelete(e) {
e.preventDefault();
dispatch("fulldelete", record.id);
}
2024-08-18 17:23:18 +03:00
function insert(e, preset) {
e.preventDefault();
2024-08-25 14:23:20 +03:00
let html = htmlurl(channel, record, preset)
2024-09-13 18:11:57 +03:00
let url = !preset ? `/${record._file.path}` : `/templates/${preset}/${record._file.path}`;
2024-08-25 14:23:20 +03:00
dispatch("editor-insert", {
html: html,
2024-09-13 18:11:57 +03:00
url: channel.filesUrl + url,
2024-08-25 14:23:20 +03:00
originalUrl: channel.filesUrl + "/" + record._file.path,
record: record
});
2024-08-18 17:23:18 +03:00
}
2024-08-15 22:11:26 +03:00
</script>
2024-10-05 18:48:38 +03:00
<div class="preview-file" class:is-trashed={edge?._isTrashed}>
2024-08-16 14:34:39 +03:00
<div style="display: flex;align-items: center;gap: 10px;">
<div class="image">
<Preview {record} size="small"/>
2024-08-15 22:11:26 +03:00
</div>
2024-08-16 14:34:39 +03:00
<div class="title">
<div>
<a
class="record-title"
href="{channel.lucentUrl}/records/{record.id}"
>
{cardTitle}
2024-10-05 18:48:38 +03:00
{#if edge?._isTrashed}
<span class="trashed-text">will remove on save</span>
2024-10-05 15:19:53 +03:00
{/if}
2024-08-16 14:34:39 +03:00
</a>
<small class="d-block">
from {schema.label}
{#if record.status === "draft"}
<Status status={record.status}/>
{/if}
</small>
</div>
2024-08-15 22:11:26 +03:00
2024-08-16 14:34:39 +03:00
</div>
2024-08-15 22:11:26 +03:00
</div>
2024-08-18 17:23:18 +03:00
<div style="display: flex;gap:4px; align-items: center; margin-right: 10px;">
{#if hasInsert}
<div class="reference-action">
<Dropdown>
<div slot="button">
<Icon icon="photo-film"/>
</div>
<button class="dropdown-item button" on:click={e => insert(e,null)}>original</button>
{#each imagePresets as preset}
<button class="dropdown-item button" on:click={e => insert(e,preset)}>{preset}</button>
{/each}
</Dropdown>
</div>
{/if}
{#if hasDelete}
<div class="reference-action">
2024-10-05 18:48:38 +03:00
{#if edge?._isTrashed}
2024-10-05 15:19:53 +03:00
<button
title="Restore"
class="button"
on:click={restore}
>
<Icon icon="undo"/>
</button>
<button
title="Delete from everywhere"
class="button"
on:click={fullDelete}
>
<Icon icon="destroy"/>
</button>
{:else}
<button
title="Remove"
class="button"
on:click={remove}
>
<Icon icon="trash-can"/>
</button>
{/if}
2024-08-18 17:23:18 +03:00
</div>
{/if}
</div>
2024-08-15 22:11:26 +03:00
</div>