2021-05-10 13:28:54 +02:00
|
|
|
<script>
|
2022-05-05 13:52:17 +02:00
|
|
|
import { Heading, Button, Icon, ActionMenu, MenuItem } from "@budibase/bbui"
|
|
|
|
import AppLockModal from "../common/AppLockModal.svelte"
|
2021-12-09 11:10:16 +01:00
|
|
|
import { processStringSync } from "@budibase/string-templates"
|
2021-12-09 12:52:47 +01:00
|
|
|
|
2021-05-10 13:28:54 +02:00
|
|
|
export let app
|
|
|
|
export let exportApp
|
2021-05-21 11:32:16 +02:00
|
|
|
export let editApp
|
2021-07-27 17:34:18 +02:00
|
|
|
export let updateApp
|
2021-05-10 13:28:54 +02:00
|
|
|
export let deleteApp
|
2021-05-21 11:32:16 +02:00
|
|
|
export let unpublishApp
|
2022-05-05 13:52:17 +02:00
|
|
|
export let appOverview
|
2021-05-13 15:04:03 +02:00
|
|
|
export let releaseLock
|
2021-12-08 19:51:24 +01:00
|
|
|
export let editIcon
|
2022-05-08 20:23:41 +02:00
|
|
|
export let copyAppId
|
2021-05-10 13:28:54 +02:00
|
|
|
</script>
|
|
|
|
|
2022-05-10 17:58:55 +02:00
|
|
|
<div class="title" data-cy={`${app.devId}`}>
|
2021-12-08 19:51:24 +01:00
|
|
|
<div style="display: flex;">
|
2022-04-20 10:17:01 +02:00
|
|
|
<div class="app-icon" style="color: {app.icon?.color || ''}">
|
2021-12-14 16:30:20 +01:00
|
|
|
<Icon size="XL" name={app.icon?.name || "Apps"} />
|
2021-12-08 19:51:24 +01:00
|
|
|
</div>
|
2022-06-03 00:41:16 +02:00
|
|
|
<div class="name" data-cy="app-name-link" on:click={() => appOverview(app)}>
|
2021-12-08 19:51:24 +01:00
|
|
|
<Heading size="XS">
|
|
|
|
{app.name}
|
|
|
|
</Heading>
|
|
|
|
</div>
|
2021-05-18 15:39:26 +02:00
|
|
|
</div>
|
2021-05-10 13:28:54 +02:00
|
|
|
</div>
|
2021-12-09 11:10:16 +01:00
|
|
|
<div class="desktop">
|
|
|
|
{#if app.updatedAt}
|
|
|
|
{processStringSync("Updated {{ duration time 'millisecond' }} ago", {
|
|
|
|
time: new Date().getTime() - new Date(app.updatedAt).getTime(),
|
|
|
|
})}
|
|
|
|
{:else}
|
|
|
|
Never updated
|
|
|
|
{/if}
|
|
|
|
</div>
|
|
|
|
<div class="desktop">
|
2022-05-06 16:52:49 +02:00
|
|
|
<AppLockModal {app} buttonSize="S" />
|
2021-12-09 11:10:16 +01:00
|
|
|
</div>
|
|
|
|
<div class="desktop">
|
2022-04-19 15:38:09 +02:00
|
|
|
<div class="app-status">
|
|
|
|
{#if app.deployed}
|
|
|
|
<Icon name="Globe" disabled={false} />
|
|
|
|
Published
|
|
|
|
{:else}
|
|
|
|
<Icon name="GlobeStrike" disabled={true} />
|
|
|
|
<span class="disabled"> Unpublished </span>
|
|
|
|
{/if}
|
|
|
|
</div>
|
2021-12-09 11:10:16 +01:00
|
|
|
</div>
|
2022-03-29 00:21:38 +02:00
|
|
|
<div data-cy={`row_actions_${app.appId}`}>
|
2022-04-20 10:17:01 +02:00
|
|
|
<div class="app-row-actions">
|
2022-04-19 15:38:09 +02:00
|
|
|
<Button
|
|
|
|
size="S"
|
2022-05-05 13:52:17 +02:00
|
|
|
secondary
|
|
|
|
quiet
|
2022-04-19 15:38:09 +02:00
|
|
|
disabled={app.lockedOther}
|
|
|
|
on:click={() => editApp(app)}
|
2022-05-05 13:52:17 +02:00
|
|
|
>Edit
|
2022-04-19 15:38:09 +02:00
|
|
|
</Button>
|
2022-05-05 13:52:17 +02:00
|
|
|
<Button size="S" cta on:click={() => appOverview(app)}>View</Button>
|
2022-04-19 15:38:09 +02:00
|
|
|
</div>
|
2022-04-20 13:51:44 +02:00
|
|
|
<ActionMenu align="right" dataCy="app-row-actions-menu-popover">
|
2022-04-26 14:54:18 +02:00
|
|
|
<span slot="control" class="app-row-actions-icon">
|
|
|
|
<Icon hoverable name="More" />
|
|
|
|
</span>
|
2021-05-21 12:49:23 +02:00
|
|
|
{#if app.lockedYou}
|
2021-05-21 11:32:16 +02:00
|
|
|
<MenuItem on:click={() => releaseLock(app)} icon="LockOpen">
|
|
|
|
Release lock
|
2021-05-13 15:04:03 +02:00
|
|
|
</MenuItem>
|
|
|
|
{/if}
|
2021-05-21 11:37:19 +02:00
|
|
|
<MenuItem on:click={() => exportApp(app)} icon="Download">Export</MenuItem>
|
|
|
|
{#if app.deployed}
|
|
|
|
<MenuItem on:click={() => unpublishApp(app)} icon="GlobeRemove">
|
|
|
|
Unpublish
|
|
|
|
</MenuItem>
|
2022-05-08 20:23:41 +02:00
|
|
|
<MenuItem on:click={() => copyAppId(app)} icon="Copy">
|
|
|
|
Copy App ID
|
|
|
|
</MenuItem>
|
2021-05-21 11:37:19 +02:00
|
|
|
{/if}
|
2021-05-21 11:32:16 +02:00
|
|
|
{#if !app.deployed}
|
2021-08-25 13:42:28 +02:00
|
|
|
<MenuItem on:click={() => updateApp(app)} icon="Edit">Edit</MenuItem>
|
2021-05-21 11:32:16 +02:00
|
|
|
<MenuItem on:click={() => deleteApp(app)} icon="Delete">Delete</MenuItem>
|
|
|
|
{/if}
|
2021-12-15 16:54:33 +01:00
|
|
|
<MenuItem on:click={() => editIcon(app)} icon="Brush">Edit icon</MenuItem>
|
2021-05-10 13:28:54 +02:00
|
|
|
</ActionMenu>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<style>
|
2022-04-20 10:17:01 +02:00
|
|
|
.app-row-actions {
|
2022-04-19 15:38:09 +02:00
|
|
|
grid-gap: var(--spacing-s);
|
|
|
|
display: grid;
|
|
|
|
grid-template-columns: 75px 75px;
|
|
|
|
}
|
|
|
|
.app-status {
|
|
|
|
display: grid;
|
2022-05-05 13:52:17 +02:00
|
|
|
grid-gap: var(--spacing-s);
|
2022-04-19 15:38:09 +02:00
|
|
|
grid-template-columns: 24px 100px;
|
|
|
|
}
|
|
|
|
.app-status span.disabled {
|
|
|
|
opacity: 0.3;
|
|
|
|
}
|
2021-05-18 15:39:26 +02:00
|
|
|
.name {
|
2021-05-10 13:28:54 +02:00
|
|
|
text-decoration: none;
|
2021-05-21 11:32:16 +02:00
|
|
|
overflow: hidden;
|
|
|
|
}
|
|
|
|
.name :global(.spectrum-Heading) {
|
|
|
|
overflow: hidden;
|
|
|
|
white-space: nowrap;
|
|
|
|
text-overflow: ellipsis;
|
2021-12-08 19:51:24 +01:00
|
|
|
margin-left: calc(1.5 * var(--spacing-xl));
|
2021-05-10 13:28:54 +02:00
|
|
|
}
|
|
|
|
.title :global(h1:hover) {
|
|
|
|
color: var(--spectrum-global-color-blue-600);
|
|
|
|
cursor: pointer;
|
|
|
|
transition: color 130ms ease;
|
|
|
|
}
|
2021-09-14 17:21:30 +02:00
|
|
|
|
|
|
|
@media (max-width: 640px) {
|
|
|
|
.desktop {
|
|
|
|
display: none !important;
|
|
|
|
}
|
|
|
|
}
|
2021-05-10 13:28:54 +02:00
|
|
|
</style>
|