forked from Cutlery/immich
Compare commits
4 Commits
main
...
web/automa
Author | SHA1 | Date | |
---|---|---|---|
|
372fae20d9 | ||
|
16543a233b | ||
|
73b961f5fa | ||
|
e0d15c96f1 |
@ -42,7 +42,7 @@
|
|||||||
'text-immich-primary dark:text-immich-dark-primary enabled:dark:hover:bg-immich-dark-primary/10 enabled:hover:bg-immich-primary/10',
|
'text-immich-primary dark:text-immich-dark-primary enabled:dark:hover:bg-immich-dark-primary/10 enabled:hover:bg-immich-primary/10',
|
||||||
'light-red': 'bg-[#F9DEDC] text-[#410E0B] enabled:hover:bg-red-50',
|
'light-red': 'bg-[#F9DEDC] text-[#410E0B] enabled:hover:bg-red-50',
|
||||||
red: 'bg-red-500 text-white enabled:hover:bg-red-400',
|
red: 'bg-red-500 text-white enabled:hover:bg-red-400',
|
||||||
green: 'bg-green-500 text-gray-800 enabled:hover:bg-green-400/90',
|
green: 'bg-green-600 text-white enabled:hover:bg-green-400/90',
|
||||||
gray: 'bg-gray-500 dark:bg-gray-200 enabled:hover:bg-gray-500/75 enabled:dark:hover:bg-gray-200/80 text-white dark:text-immich-dark-gray',
|
gray: 'bg-gray-500 dark:bg-gray-200 enabled:hover:bg-gray-500/75 enabled:dark:hover:bg-gray-200/80 text-white dark:text-immich-dark-gray',
|
||||||
'transparent-gray':
|
'transparent-gray':
|
||||||
'dark:text-immich-dark-fg enabled:hover:bg-immich-primary/5 enabled:hover:text-gray-700 enabled:hover:dark:text-immich-dark-fg enabled:dark:hover:bg-immich-dark-primary/25',
|
'dark:text-immich-dark-fg enabled:hover:bg-immich-primary/5 enabled:hover:text-gray-700 enabled:hover:dark:text-immich-dark-fg enabled:dark:hover:bg-immich-dark-primary/25',
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
mdiMagnify,
|
mdiMagnify,
|
||||||
mdiMap,
|
mdiMap,
|
||||||
mdiTrashCanOutline,
|
mdiTrashCanOutline,
|
||||||
|
mdiTuneVariant,
|
||||||
} from '@mdi/js';
|
} from '@mdi/js';
|
||||||
import LoadingSpinner from '../loading-spinner.svelte';
|
import LoadingSpinner from '../loading-spinner.svelte';
|
||||||
import StatusBox from '../status-box.svelte';
|
import StatusBox from '../status-box.svelte';
|
||||||
@ -145,6 +146,12 @@
|
|||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
</SideBarLink>
|
</SideBarLink>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
<div class="text-xs transition-all duration-200 dark:text-immich-dark-fg">
|
||||||
|
<p class="hidden p-6 group-hover:sm:block md:block">AUTOMATION</p>
|
||||||
|
<hr class="mx-4 mb-[31px] mt-8 block group-hover:sm:hidden md:hidden" />
|
||||||
|
</div>
|
||||||
|
<SideBarLink title="Workflows" routeId="/(user)/workflows" icon={mdiTuneVariant} />
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- Status Box -->
|
<!-- Status Box -->
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import CircleIconButton from '$lib/components/elements/buttons/circle-icon-button.svelte';
|
||||||
|
import { mdiPencil, mdiTrashCan } from '@mdi/js';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="bg-zinc-300 dark:bg-zinc-800 text-black dark:text-white min-h-[60px] grid grid-cols-[15%_70%_15%] place-items-center place-content-center rounded-2xl mx-4 mt-2 p-2"
|
||||||
|
>
|
||||||
|
<p class="col-start-2 col-span-1">Add to album "RANDOM"</p>
|
||||||
|
|
||||||
|
<div class="col-start-3 col-span-1 flex gap-2 justify-self-end">
|
||||||
|
<CircleIconButton size="20" padding="2" title="Remove rule" icon={mdiTrashCan} />
|
||||||
|
<CircleIconButton size="20" padding="2" title="Edit rule" icon={mdiPencil} />
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,15 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import CircleIconButton from '$lib/components/elements/buttons/circle-icon-button.svelte';
|
||||||
|
import { mdiPencil, mdiTrashCan } from '@mdi/js';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="bg-zinc-200 text-black dark:bg-zinc-700 dark:text-white min-h-[60px] grid grid-cols-[15%_70%_15%] place-items-center place-content-center rounded-2xl mx-4 mt-2 p-2"
|
||||||
|
>
|
||||||
|
<p class="col-start-2 col-span-1">And has Alex and Henry and Nate</p>
|
||||||
|
|
||||||
|
<div class="col-start-3 col-span-1 flex gap-2 justify-self-end">
|
||||||
|
<CircleIconButton size="20" padding="2" title="Remove rule" icon={mdiTrashCan} />
|
||||||
|
<CircleIconButton size="20" padding="2" title="Edit rule" icon={mdiPencil} />
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,5 @@
|
|||||||
|
<div
|
||||||
|
class="bg-immich-primary text-white dark:bg-immich-dark-primary dark:text-black min-h-[60px] flex place-items-center place-content-center mx-4 mt-2 rounded-2xl"
|
||||||
|
>
|
||||||
|
When an asset is uploaded
|
||||||
|
</div>
|
10
web/src/lib/components/workflow-page/workflow-card.svelte
Normal file
10
web/src/lib/components/workflow-page/workflow-card.svelte
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
// export let onSelect: () => void;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="rounded-3xl mr-2 my-4 min-h-[60px] grid grid-cols-[32px_1fr] gap-2 place-items-center p-4 place-content-center bg-gray-100 hover:bg-gray-200 dark:bg-gray-900 hover:dark:bg-gray-800"
|
||||||
|
>
|
||||||
|
<div class="w-4 h-4 rounded-full bg-green-400"></div>
|
||||||
|
<p class="dark:text-gray-300">Add this photo to every albums and notify everybody about this glorious asset</p>
|
||||||
|
</div>
|
82
web/src/lib/components/workflow-page/workflow-editor.svelte
Normal file
82
web/src/lib/components/workflow-page/workflow-editor.svelte
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import Button from '$lib/components/elements/buttons/button.svelte';
|
||||||
|
import Icon from '$lib/components/elements/icon.svelte';
|
||||||
|
import WorkflowActionCard from '$lib/components/workflow-page/editor/workflow-action-card.svelte';
|
||||||
|
import WorkflowRuleCard from '$lib/components/workflow-page/editor/workflow-rule-card.svelte';
|
||||||
|
import WorkflowTriggerCard from '$lib/components/workflow-page/editor/workflow-trigger-card.svelte';
|
||||||
|
import { mdiPlus } from '@mdi/js';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<section class="h-full overflow-scroll">
|
||||||
|
<div
|
||||||
|
id="workflow-control-bar"
|
||||||
|
class="sticky top-0 flex justify-between place-items-center border-b border-gray-200 dark:border-gray-800 p-4 bg-zinc-50 dark:bg-zinc-900 z-20"
|
||||||
|
>
|
||||||
|
<p class="uppercase text-lg dark:text-white font-medium">
|
||||||
|
Add this photo to every albums and notify everybody about this glorious asset
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="flex gap-2">
|
||||||
|
<Button size="sm" color="red">Discard</Button>
|
||||||
|
<Button size="sm">Disable</Button>
|
||||||
|
<Button size="sm" color="green">Save</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="workflows-selection">
|
||||||
|
<!-- TRIGGER BLOCK -->
|
||||||
|
<div class="translate-y-3">
|
||||||
|
<p class="pl-4 text-xs dark:text-gray-300">TRIGGER</p>
|
||||||
|
<WorkflowTriggerCard />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- VISUAL CONNECTOR -->
|
||||||
|
<div class="relative w-full grid grid-cols-3 place-items-center place-content-center z-10">
|
||||||
|
<p class="col-start-1 col-span-1 justify-self-start self-end pl-4 pb-6 text-xs dark:text-gray-300">RULES</p>
|
||||||
|
<div class="col-start-2 col-span-1 flex flex-col place-items-center">
|
||||||
|
<div
|
||||||
|
class="rounded-full border-[6px] border-immich-primary dark:border-immich-dark-primary h-[20px] w-[20px] bg-white translate-y-1"
|
||||||
|
></div>
|
||||||
|
<div
|
||||||
|
class="h-[60px] w-[5px] bg-white bg-gradient-to-b from-immich-primary dark:from-immich-dark-primary via-zinc-300 dark:via-gray-600 dark:to-zinc-700"
|
||||||
|
></div>
|
||||||
|
<div
|
||||||
|
class="rounded-full border-[6px] border-zinc-200 dark:border-gray-700 h-[20px] w-[20px] bg-white -translate-y-1"
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- RULES BLOCK -->
|
||||||
|
<div id="rule-block" class="-translate-y-6">
|
||||||
|
<WorkflowRuleCard />
|
||||||
|
<WorkflowRuleCard />
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="border-2 dark:border-gray-700 dark:text-white min-h-[60px] flex place-items-center place-content-center rounded-2xl mx-4 mt-2"
|
||||||
|
>
|
||||||
|
<span><Icon path={mdiPlus} /></span> ADD RULE
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- VISUAL CONNECTOR -->
|
||||||
|
<div class="relative w-full grid grid-cols-3 place-items-center place-content-center -translate-y-9 z-10">
|
||||||
|
<p class="col-start-1 col-span-1 justify-self-start self-end pl-4 pb-6 text-xs dark:text-gray-300">ACTIONS</p>
|
||||||
|
<div class="col-start-2 col-span-1 flex flex-col place-items-center">
|
||||||
|
<div class="rounded-full border-[6px] border-gray-900 h-[20px] w-[20px] bg-white translate-y-1"></div>
|
||||||
|
<div class="h-[60px] w-[5px] bg-white bg-gradient-to-b from-gray-900 via-indigo-800 to-gray-700"></div>
|
||||||
|
<div class="rounded-full border-[6px] border-gray-700 h-[20px] w-[20px] bg-white -translate-y-1"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ACTION BLOCK -->
|
||||||
|
<div id="action-block" class="-translate-y-14">
|
||||||
|
<WorkflowActionCard />
|
||||||
|
<WorkflowActionCard />
|
||||||
|
<div
|
||||||
|
class="border-2 dark:border-gray-500 dark:text-white min-h-[60px] flex place-items-center place-content-center rounded-2xl mx-4 mt-2"
|
||||||
|
>
|
||||||
|
<span><Icon path={mdiPlus} /></span> ADD ACTION
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
17
web/src/lib/components/workflow-page/workflow-list.svelte
Normal file
17
web/src/lib/components/workflow-page/workflow-list.svelte
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import Button from '$lib/components/elements/buttons/button.svelte';
|
||||||
|
import WorkflowCard from '$lib/components/workflow-page/workflow-card.svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<section id="workflow-list" class="border-r border-gray-200 dark:border-gray-800 h-full relative overflow-scroll pr-2">
|
||||||
|
<div class="sticky top-0 dark:bg-immich-dark-bg flex justify-between place-items-center pr-2 py-4 bg-immich-bg">
|
||||||
|
<p class="text-xs dark:text-white">CURRENT WORKFLOWS</p>
|
||||||
|
<Button size="sm">New Workflow</Button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
{#each Array.from({ length: 50 }) as _}
|
||||||
|
<WorkflowCard />
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</section>
|
15
web/src/routes/(user)/workflows/+page.svelte
Normal file
15
web/src/routes/(user)/workflows/+page.svelte
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte';
|
||||||
|
import WorkflowEditor from '$lib/components/workflow-page/workflow-editor.svelte';
|
||||||
|
import WorkflowList from '$lib/components/workflow-page/workflow-list.svelte';
|
||||||
|
import type { PageData } from './$types';
|
||||||
|
|
||||||
|
export let data: PageData;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<UserPageLayout title={data.meta.title} scrollbar={false}>
|
||||||
|
<section class="grid grid-cols-[25%_1fr] h-full">
|
||||||
|
<WorkflowList />
|
||||||
|
<WorkflowEditor />
|
||||||
|
</section>
|
||||||
|
</UserPageLayout>
|
12
web/src/routes/(user)/workflows/+page.ts
Normal file
12
web/src/routes/(user)/workflows/+page.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { authenticate } from '$lib/utils/auth';
|
||||||
|
import type { PageLoad } from './$types';
|
||||||
|
|
||||||
|
export const load = (async () => {
|
||||||
|
await authenticate();
|
||||||
|
|
||||||
|
return {
|
||||||
|
meta: {
|
||||||
|
title: 'Workflows',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}) satisfies PageLoad;
|
Loading…
x
Reference in New Issue
Block a user