From f40cdc4cc844e8efce67649f58b082be4087be8d Mon Sep 17 00:00:00 2001 From: JosephVolosin Date: Fri, 27 Mar 2026 09:24:54 -0400 Subject: [PATCH 1/8] Create Actiity Directive Builder --- src/components/ActivityList.svelte | 41 +- src/components/TimelineItemList.svelte | 53 +- .../activity/ActivityDirectiveBuilder.svelte | 500 ++++++++++++++++++ src/utilities/effects.ts | 54 +- 4 files changed, 643 insertions(+), 5 deletions(-) create mode 100644 src/components/activity/ActivityDirectiveBuilder.svelte diff --git a/src/components/ActivityList.svelte b/src/components/ActivityList.svelte index 9e59dbac76..bd848a5485 100644 --- a/src/components/ActivityList.svelte +++ b/src/components/ActivityList.svelte @@ -1,10 +1,12 @@ + { + directiveBuilderActiveDirective = directive.detail.directive; + }} + on:visibilityChange={visibility => { + if (!visibility.detail.isShown) { + activeDirectiveName = ''; + } + }} + on:createActivityDirective={directive => { + onCreateActivityDirective(directive.detail.directive); + }} + {user} +/> ({ color: s.color || '', label: s.name, value: s.id }))} filterName="Subsystem" + {user} > + {/if} diff --git a/src/components/timeline/Row.svelte b/src/components/timeline/Row.svelte index 4c8ab3eac7..2a9b919ec8 100644 --- a/src/components/timeline/Row.svelte +++ b/src/components/timeline/Row.svelte @@ -141,6 +141,7 @@ export let user: User | null; const dispatch = createEventDispatcher<{ + buildDirective: string; discreteTreeExpansionChange: DiscreteTreeExpansionMap; mouseDown: MouseDown; mouseOver: MouseOver; @@ -760,7 +761,7 @@ const createActivities = () => { items.forEach(item => { - effects.createActivityDirective({}, start_time, item.name, item.name, {}, plan, user); + dispatch('buildDirective', item.name); }); }; diff --git a/src/components/timeline/Timeline.svelte b/src/components/timeline/Timeline.svelte index 73f75aaf3b..2d7ee1103c 100644 --- a/src/components/timeline/Timeline.svelte +++ b/src/components/timeline/Timeline.svelte @@ -10,7 +10,7 @@ import { planDerivationGroupLinks } from '../../stores/external-source'; import { plugins } from '../../stores/plugins'; import { viewAddTimelineRow, viewUpdateTimeline } from '../../stores/views'; - import type { ActivityDirectiveId, ActivityDirectivesMap } from '../../types/activity'; + import type { ActivityDirectiveId, ActivityDirectiveInsertInput, ActivityDirectivesMap } from '../../types/activity'; import type { User } from '../../types/app'; import type { ConstraintResultWithName } from '../../types/constraint'; import type { ExternalEvent, ExternalEventId } from '../../types/external-event'; @@ -33,9 +33,11 @@ Timeline, XAxisTick, } from '../../types/timeline'; + import effects from '../../utilities/effects'; import { clamp } from '../../utilities/generic'; import { formatDate } from '../../utilities/time'; import { MAX_CANVAS_SIZE, TimelineInteractionMode, TimelineLockStatus, getXScale } from '../../utilities/timeline'; + import ActivityDirectiveBuilder from '../activity/ActivityDirectiveBuilder.svelte'; import TimelineRow from './Row.svelte'; import RowHeaderDragHandleWidth from './RowHeaderDragHandleWidth.svelte'; import TimelineContextMenu from './TimelineContextMenu.svelte'; @@ -115,6 +117,8 @@ let xAxisDrawHeight: number = 64; let xTicksView: XAxisTick[] = []; let derivationGroups: string[] = []; + let directiveBuilder: ActivityDirectiveBuilder; + let activeDirectiveName = ''; let throttledZoom = throttle(onZoom, 16, { leading: true, @@ -382,10 +386,38 @@ tooltip.hide(); } } + + function onBuildActivityDirective(activityType: string) { + console.log(activityType); + directiveBuilder.setCurrentActivityType(activityType); + directiveBuilder.show(); + } + + function onCreateActivityDirective(directive: ActivityDirectiveInsertInput) { + if (plan !== null && plan.model) { + effects.createActivityDirectivePredefined(directive, plan, user); + directiveBuilder.toggle(); + } + } + { + if (!visibility.detail.isShown) { + activeDirectiveName = ''; + } + }} + on:createActivityDirective={directive => { + onCreateActivityDirective(directive.detail.directive); + }} + {user} +/> +
{#if plan} @@ -513,6 +545,7 @@ yAxes={row.yAxes} {timelineZoomTransform} on:contextMenu={e => onContextMenu(e, row)} + on:buildDirective={e => onBuildActivityDirective(e.detail)} on:dblClick on:deleteActivityDirective on:mouseDown={onMouseDown} From 1a8351ba7d530a085fcbfd54f795042789be8a46 Mon Sep 17 00:00:00 2001 From: JosephVolosin Date: Fri, 24 Apr 2026 13:00:56 -0400 Subject: [PATCH 3/8] Linting, add start time set during drag & drop --- src/components/ExternalEventTypeList.svelte | 1 + src/components/ResourceList.svelte | 1 + src/components/TimelineItemList.svelte | 3 --- src/components/activity/ActivityDirectiveBuilder.svelte | 4 ++++ src/components/timeline/Row.svelte | 4 ++-- src/components/timeline/Timeline.svelte | 5 +++-- 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/components/ExternalEventTypeList.svelte b/src/components/ExternalEventTypeList.svelte index 036d6701cf..21a070a605 100644 --- a/src/components/ExternalEventTypeList.svelte +++ b/src/components/ExternalEventTypeList.svelte @@ -18,4 +18,5 @@ filterOptions={$externalEventTypes.map(t => ({ label: t.name, value: t.name }))} filterName="Event Type" {getFilterValueFromItem} + user={null} /> diff --git a/src/components/ResourceList.svelte b/src/components/ResourceList.svelte index 81342c9781..5f4ce85aec 100644 --- a/src/components/ResourceList.svelte +++ b/src/components/ResourceList.svelte @@ -77,6 +77,7 @@ {getFilterValueFromItem} {loading} let:prop={item} + user={null} >