@memberjunction/ng-user-routines 0.0.0 → 5.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/my-routines-list.component.d.ts +119 -0
- package/dist/lib/my-routines-list.component.d.ts.map +1 -0
- package/dist/lib/my-routines-list.component.js +574 -0
- package/dist/lib/my-routines-list.component.js.map +1 -0
- package/dist/lib/new-routine.component.d.ts +182 -0
- package/dist/lib/new-routine.component.d.ts.map +1 -0
- package/dist/lib/new-routine.component.js +1070 -0
- package/dist/lib/new-routine.component.js.map +1 -0
- package/dist/lib/routine-history.component.d.ts +65 -0
- package/dist/lib/routine-history.component.d.ts.map +1 -0
- package/dist/lib/routine-history.component.js +290 -0
- package/dist/lib/routine-history.component.js.map +1 -0
- package/dist/lib/routine-target-catalog.d.ts +48 -0
- package/dist/lib/routine-target-catalog.d.ts.map +1 -0
- package/dist/lib/routine-target-catalog.js +59 -0
- package/dist/lib/routine-target-catalog.js.map +1 -0
- package/dist/lib/routine-ui-helpers.d.ts +49 -0
- package/dist/lib/routine-ui-helpers.d.ts.map +1 -0
- package/dist/lib/routine-ui-helpers.js +174 -0
- package/dist/lib/routine-ui-helpers.js.map +1 -0
- package/dist/lib/user-routines-command-center.component.d.ts +88 -0
- package/dist/lib/user-routines-command-center.component.d.ts.map +1 -0
- package/dist/lib/user-routines-command-center.component.js +372 -0
- package/dist/lib/user-routines-command-center.component.js.map +1 -0
- package/dist/lib/user-routines-events.d.ts +88 -0
- package/dist/lib/user-routines-events.d.ts.map +1 -0
- package/dist/lib/user-routines-events.js +97 -0
- package/dist/lib/user-routines-events.js.map +1 -0
- package/dist/lib/user-routines-slide-in.component.d.ts +57 -0
- package/dist/lib/user-routines-slide-in.component.d.ts.map +1 -0
- package/dist/lib/user-routines-slide-in.component.js +170 -0
- package/dist/lib/user-routines-slide-in.component.js.map +1 -0
- package/dist/lib/user-routines.module.d.ts +37 -0
- package/dist/lib/user-routines.module.d.ts.map +1 -0
- package/dist/lib/user-routines.module.js +113 -0
- package/dist/lib/user-routines.module.js.map +1 -0
- package/dist/public-api.d.ts +10 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/public-api.js +19 -0
- package/dist/public-api.js.map +1 -0
- package/package.json +49 -7
- package/README.md +0 -45
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"my-routines-list.component.js","sourceRoot":"","sources":["../../src/lib/my-routines-list.component.ts","../../src/lib/my-routines-list.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJUserRoutineEntity, UserRoutineEngine } from '@memberjunction/core-entities';\nimport { NormalizeUUID } from '@memberjunction/global';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJConfirmService } from '@memberjunction/ng-ui-components';\nimport { DescribeCronExpression } from '@memberjunction/global';\nimport { FormatRelativeTime, RoutineChipVariant, RoutineStatusVariant, RunStatusVariant } from './routine-ui-helpers';\nimport { LoadRoutineTargetCatalog } from './routine-target-catalog';\nimport { ConversationOpenedEventArgs,\n AfterRoutineDeletedEventArgs,\n AfterRoutinePausedEventArgs,\n AfterRoutineRunNowEventArgs,\n BeforeRoutineDeletedEventArgs,\n BeforeRoutinePausedEventArgs,\n BeforeRoutineRunNowEventArgs,\n RoutineSelectedEventArgs,\n} from './user-routines-events';\n\n/** Filter value for the routine Status facet ('all' disables the facet). */\nexport type RoutineStatusFilter = 'all' | MJUserRoutineEntity['Status'];\n\n/** Emitted whenever the loaded/filtered routine counts change (load, filter, refresh). */\nexport interface RoutineCounts {\n Filtered: number;\n Total: number;\n}\n\n/**\n * \"My Routines\" — card list of the CURRENT USER's routines with per-card quick actions\n * (run now / pause-resume / edit / history / delete). Data comes from the shared\n * {@link UserRoutineEngine} cache — no ad-hoc RunViews.\n *\n * Reusable (Generic) component: no Router, no page chrome. Mutating quick actions raise\n * cancelable `Before*` events (set `Cancel = true` to veto) followed by informational\n * `After*` events, per the standard MJ Before/After event idiom.\n *\n * Run-now v1 semantics: sets `NextRunAt = now` and saves — the User Routine Dispatcher\n * job claims due routines on its next sweep (within a minute).\n */\n@Component({\n standalone: false,\n selector: 'mj-my-routines-list',\n templateUrl: './my-routines-list.component.html',\n styleUrls: ['./my-routines-list.component.css'],\n})\nexport class MyRoutinesListComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n private cdr = inject(ChangeDetectorRef);\n private notifications = inject(MJNotificationService);\n private confirm = inject(MJConfirmService);\n private destroy$ = new Subject<void>();\n\n // ---------------------------------------------------------------\n // Inputs (getter/setter pattern — re-filter on change)\n // ---------------------------------------------------------------\n private _searchText = '';\n /** Free-text filter over routine name, description, and agent name. */\n public get SearchText(): string {\n return this._searchText;\n }\n @Input()\n public set SearchText(value: string) {\n if (value !== this._searchText) {\n this._searchText = value ?? '';\n this.applyFilters();\n }\n }\n\n private _statusFilter: RoutineStatusFilter = 'all';\n /** Status facet filter. */\n public get StatusFilter(): RoutineStatusFilter {\n return this._statusFilter;\n }\n @Input()\n public set StatusFilter(value: RoutineStatusFilter) {\n if (value !== this._statusFilter) {\n this._statusFilter = value ?? 'all';\n this.applyFilters();\n }\n }\n\n // ---------------------------------------------------------------\n // Outputs — navigation intents\n // ---------------------------------------------------------------\n /** User asked to create a new routine (empty-state CTA). The host opens the editor. */\n @Output() CreateRequested = new EventEmitter<void>();\n /** User asked to edit a routine. The host opens the editor. */\n @Output() EditRequested = new EventEmitter<MJUserRoutineEntity>();\n /** User asked to view a routine's run history. The host opens the history view. */\n @Output() HistoryRequested = new EventEmitter<MJUserRoutineEntity>();\n /** Informational: a routine was selected (history/detail opened). */\n @Output() RoutineSelected = new EventEmitter<RoutineSelectedEventArgs>();\n /** Loaded/filtered counts changed (load, filter, refresh). */\n @Output() CountsChanged = new EventEmitter<RoutineCounts>();\n\n // ---------------------------------------------------------------\n // Outputs — cancelable Before/After event pairs\n // ---------------------------------------------------------------\n /** Cancelable: fires before a pause/resume Status toggle is saved. */\n @Output() BeforeRoutinePaused = new EventEmitter<BeforeRoutinePausedEventArgs>();\n /** Informational: fires after a pause/resume Status toggle was saved. */\n @Output() AfterRoutinePaused = new EventEmitter<AfterRoutinePausedEventArgs>();\n /** Cancelable: fires before a routine is queued to run now. */\n @Output() BeforeRoutineRunNow = new EventEmitter<BeforeRoutineRunNowEventArgs>();\n /** Informational: fires after a routine was queued to run now. */\n @Output() AfterRoutineRunNow = new EventEmitter<AfterRoutineRunNowEventArgs>();\n /** Cancelable: fires before a routine (and its recipients) is deleted. */\n @Output() BeforeRoutineDeleted = new EventEmitter<BeforeRoutineDeletedEventArgs>();\n /** Informational: fires after a routine was deleted. */\n @Output() AfterRoutineDeleted = new EventEmitter<AfterRoutineDeletedEventArgs>();\n\n // ---------------------------------------------------------------\n // State\n // ---------------------------------------------------------------\n public Routines: MJUserRoutineEntity[] = [];\n public FilteredRoutines: MJUserRoutineEntity[] = [];\n public IsLoading = false;\n /** IDs of routines with an in-flight save/delete (disables that card's action buttons). */\n public BusyRoutineIDs = new Set<string>();\n\n private agentNameByID = new Map<string, string>();\n private agentIconByID = new Map<string, string>();\n\n // Template helpers (bound, so keep as instance members)\n public readonly DescribeCron = DescribeCronExpression;\n public readonly RelativeTime = FormatRelativeTime;\n public readonly StatusVariant = RoutineStatusVariant;\n public readonly LastRunVariant = RunStatusVariant;\n\n async ngOnInit(): Promise<void> {\n this.IsLoading = true;\n this.cdr.markForCheck();\n try {\n const engine = this.engine();\n const p = this.ProviderToUse;\n const [, catalog] = await Promise.all([\n engine.Config(false, p.CurrentUser, p),\n LoadRoutineTargetCatalog(p),\n ]);\n this.agentNameByID = catalog.NameByID;\n this.agentIconByID = catalog.IconByID;\n // Reactive: re-render whenever the engine's routines cache mutates\n engine.Routines$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.Routines = engine.Routines;\n this.applyFilters();\n });\n this.Routines = engine.Routines;\n this.applyFilters();\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Snapshot of the time-relative strings, keyed by routine ID. Templates must NOT\n * call FormatRelativeTime directly — its value can change between check passes at\n * a minute boundary (NG0100). Rebuilt on every data change and on a 30s timer.\n */\n private relativeText = new Map<string, { Last: string; Next: string }>();\n private relativeTimer: ReturnType<typeof setInterval> | null = null;\n\n /** Stable-within-a-pass \"Last run\" text for a routine. */\n public LastRunText(routine: MJUserRoutineEntity): string {\n return this.relativeText.get(routine.ID)?.Last ?? '';\n }\n\n /** Stable-within-a-pass \"Next run\" text for a routine. */\n public NextRunText(routine: MJUserRoutineEntity): string {\n return this.relativeText.get(routine.ID)?.Next ?? '';\n }\n\n private rebuildRelativeText(): void {\n this.relativeText = new Map(this.Routines.map((r) => [r.ID, {\n Last: r.LastRunAt ? FormatRelativeTime(r.LastRunAt) : '',\n Next: r.NextRunAt ? FormatRelativeTime(r.NextRunAt) : '',\n }]));\n if (this.relativeTimer == null && this.Routines.length > 0) {\n this.relativeTimer = setInterval(() => {\n this.rebuildRelativeText();\n this.cdr.markForCheck();\n }, 30_000);\n }\n }\n\n ngOnDestroy(): void {\n if (this.relativeTimer != null) {\n clearInterval(this.relativeTimer);\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /** Force-refreshes the engine cache (and this list). */\n public async Refresh(): Promise<void> {\n this.IsLoading = true;\n this.cdr.markForCheck();\n try {\n await this.engine().Refresh(this.ProviderToUse.CurrentUser);\n this.Routines = this.engine().Routines;\n this.applyFilters();\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n /** Display name of a routine's target agent (falls back when the agent no longer exists). */\n public AgentName(routine: MJUserRoutineEntity): string {\n return this.agentNameByID.get(NormalizeUUID(routine.TargetID)) ?? '(unknown agent)';\n }\n\n /** The agent's own IconClass, falling back to the standard robot mark. */\n public AgentIcon(routine: MJUserRoutineEntity): string {\n return this.agentIconByID.get(NormalizeUUID(routine.TargetID)) ?? 'fa-solid fa-robot';\n }\n\n // ---------------------------------------------------------------\n // Quick actions (Before → save → After)\n // ---------------------------------------------------------------\n\n /** Toggles Active ⇄ Paused (Disabled routines resume to Active as well). */\n public async ToggleStatus(routine: MJUserRoutineEntity): Promise<void> {\n if (this.BusyRoutineIDs.has(routine.ID)) {\n return;\n }\n const previous = routine.Status;\n const newStatus: MJUserRoutineEntity['Status'] = previous === 'Active' ? 'Paused' : 'Active';\n\n const beforeArgs = new BeforeRoutinePausedEventArgs(routine, newStatus);\n this.BeforeRoutinePaused.emit(beforeArgs);\n if (beforeArgs.Cancel) {\n return;\n }\n\n routine.Status = newStatus;\n const saved = await this.saveRoutine(\n routine,\n newStatus === 'Active' ? `'${routine.Name}' resumed` : `'${routine.Name}' paused`,\n () => (routine.Status = previous)\n );\n if (saved) {\n this.AfterRoutinePaused.emit(new AfterRoutinePausedEventArgs(routine, newStatus));\n }\n }\n\n /**\n * Run-now v1: stamps NextRunAt = now and saves; the dispatcher job claims due\n * routines on its next sweep. Only meaningful for Active routines.\n */\n public async RunNow(routine: MJUserRoutineEntity): Promise<void> {\n if (this.BusyRoutineIDs.has(routine.ID) || routine.Status !== 'Active') {\n return;\n }\n const beforeArgs = new BeforeRoutineRunNowEventArgs(routine);\n this.BeforeRoutineRunNow.emit(beforeArgs);\n if (beforeArgs.Cancel) {\n return;\n }\n\n const previous = routine.NextRunAt;\n routine.NextRunAt = new Date();\n const saved = await this.saveRoutine(\n routine,\n `'${routine.Name}' queued to run — the dispatcher picks it up within the next minute.`,\n () => (routine.NextRunAt = previous)\n );\n if (saved) {\n this.AfterRoutineRunNow.emit(new AfterRoutineRunNowEventArgs(routine));\n }\n }\n\n /** Deletes a routine (after user confirmation), removing its recipients first. */\n public async DeleteRoutine(routine: MJUserRoutineEntity): Promise<void> {\n if (this.BusyRoutineIDs.has(routine.ID)) {\n return;\n }\n const beforeArgs = new BeforeRoutineDeletedEventArgs(routine);\n this.BeforeRoutineDeleted.emit(beforeArgs);\n if (beforeArgs.Cancel) {\n return;\n }\n\n const confirmed = await this.confirm.ConfirmDelete({\n title: 'Delete Routine',\n message: `Delete '${routine.Name}'? Its recipients and run bookkeeping are removed too — the underlying agent/prompt/action run records remain.`,\n });\n if (!confirmed) {\n return;\n }\n\n this.BusyRoutineIDs.add(routine.ID);\n this.cdr.markForCheck();\n try {\n const engine = this.engine();\n // The server-side entity subclass cascades recipients + run bookkeeping\n // before the routine row (FK cleanup) — one Delete() is the whole story.\n const deleted = await routine.Delete();\n if (!deleted) {\n this.notifications.CreateSimpleNotification(\n `Delete failed: ${routine.LatestResult?.CompleteMessage ?? 'unknown error'}`,\n 'error',\n 6000\n );\n return;\n }\n this.notifications.CreateSimpleNotification(`'${routine.Name}' deleted`, 'success', 3000);\n // Full refresh so the dependent recipient/run configs re-scope\n await engine.Refresh(this.ProviderToUse.CurrentUser);\n this.Routines = engine.Routines;\n this.applyFilters();\n this.AfterRoutineDeleted.emit(new AfterRoutineDeletedEventArgs(routine));\n } finally {\n this.BusyRoutineIDs.delete(routine.ID);\n this.cdr.markForCheck();\n }\n }\n\n /** The routine's dedicated conversation was requested (chat icon on the card). */\n @Output() ConversationOpened = new EventEmitter<ConversationOpenedEventArgs>();\n\n /** Raises ConversationOpened for hosts to present the routine's conversation. */\n public OpenConversation(routine: MJUserRoutineEntity): void {\n if (routine.ConversationID) {\n this.ConversationOpened.emit(new ConversationOpenedEventArgs(routine.ConversationID, routine));\n }\n }\n\n /** Opens a routine's history (raises RoutineSelected + HistoryRequested). */\n public OpenHistory(routine: MJUserRoutineEntity): void {\n this.RoutineSelected.emit(new RoutineSelectedEventArgs(routine));\n this.HistoryRequested.emit(routine);\n }\n\n /** True when the run-now button should be disabled for this routine. */\n public RunNowDisabled(routine: MJUserRoutineEntity): boolean {\n return routine.Status !== 'Active' || this.BusyRoutineIDs.has(routine.ID);\n }\n\n /** Chip variant helper narrowed for the template. */\n public ChipClass(variant: RoutineChipVariant): string {\n return `routine-chip routine-chip--${variant}`;\n }\n\n // ---------------------------------------------------------------\n // Internals\n // ---------------------------------------------------------------\n private engine(): UserRoutineEngine {\n return UserRoutineEngine.GetProviderInstance<UserRoutineEngine>(this.ProviderToUse, UserRoutineEngine) as UserRoutineEngine;\n }\n\n /** Saves a routine, surfacing LatestResult.CompleteMessage and reverting on failure. */\n private async saveRoutine(routine: MJUserRoutineEntity, successMessage: string, revert: () => void): Promise<boolean> {\n this.BusyRoutineIDs.add(routine.ID);\n this.cdr.markForCheck();\n try {\n const saved = await routine.Save();\n if (saved) {\n this.notifications.CreateSimpleNotification(successMessage, 'success', 3500);\n this.applyFilters();\n return true;\n }\n revert();\n this.notifications.CreateSimpleNotification(\n `Save failed: ${routine.LatestResult?.CompleteMessage ?? 'unknown error'}`,\n 'error',\n 6000\n );\n return false;\n } finally {\n this.BusyRoutineIDs.delete(routine.ID);\n this.cdr.markForCheck();\n }\n }\n\n private applyFilters(): void {\n this.rebuildRelativeText();\n const search = this._searchText.trim().toLowerCase();\n this.FilteredRoutines = this.Routines.filter((r) => {\n if (this._statusFilter !== 'all' && r.Status !== this._statusFilter) {\n return false;\n }\n if (search.length > 0) {\n const haystack = `${r.Name ?? ''} ${r.Description ?? ''} ${this.AgentName(r)}`.toLowerCase();\n if (!haystack.includes(search)) {\n return false;\n }\n }\n return true;\n });\n this.CountsChanged.emit({ Filtered: this.FilteredRoutines.length, Total: this.Routines.length });\n this.cdr.markForCheck();\n }\n}\n","<!-- Loading -->\n@if (IsLoading) {\n <div class=\"routines-loading\">\n <mj-loading text=\"Loading routines...\" size=\"medium\"></mj-loading>\n </div>\n}\n\n<!-- Empty: no routines at all -->\n@if (!IsLoading && Routines.length === 0) {\n <mj-empty-state\n Size=\"large\"\n Icon=\"fa-solid fa-business-time\"\n Title=\"No Routines Yet\"\n Message=\"Routines run an AI agent for you on a schedule — and can watch for changes and notify you.\"\n ActionText=\"Create Your First Routine\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"CreateRequested.emit()\">\n </mj-empty-state>\n}\n\n<!-- Empty: filters exclude everything -->\n@if (!IsLoading && Routines.length > 0 && FilteredRoutines.length === 0) {\n <mj-empty-state\n Variant=\"no-results\"\n Icon=\"fa-solid fa-filter-circle-xmark\"\n Title=\"No Matching Routines\"\n Message=\"No routines match your current search or filters.\">\n </mj-empty-state>\n}\n\n<!-- Card list -->\n@if (!IsLoading && FilteredRoutines.length > 0) {\n <div class=\"routines-grid\">\n @for (routine of FilteredRoutines; track routine.ID) {\n <div class=\"routine-card\">\n <div class=\"routine-card-header\">\n <div class=\"routine-target-icon\" [title]=\"AgentName(routine)\">\n <i [class]=\"AgentIcon(routine)\"></i>\n </div>\n <div class=\"routine-card-title\">\n <h3 class=\"routine-name\" [title]=\"routine.Name\">{{ routine.Name }}</h3>\n <div class=\"routine-target-line\" [title]=\"AgentName(routine)\">\n {{ AgentName(routine) }}\n </div>\n </div>\n <span [class]=\"ChipClass(StatusVariant(routine.Status))\">{{ routine.Status }}</span>\n </div>\n\n @if (routine.Description) {\n <p class=\"routine-description\" [title]=\"routine.Description\">{{ routine.Description }}</p>\n }\n\n <div class=\"routine-meta\">\n <div class=\"routine-meta-row\">\n <i class=\"fa-solid\" [class.fa-clock]=\"routine.RoutineType === 'Scheduled'\" [class.fa-eye]=\"routine.RoutineType === 'Monitoring'\"></i>\n <span class=\"routine-type-badge\">{{ routine.RoutineType }}</span>\n <span class=\"routine-cron\" [title]=\"routine.CronExpression\">{{ DescribeCron(routine.CronExpression) }}</span>\n <span class=\"routine-tz\">({{ routine.Timezone }})</span>\n </div>\n <div class=\"routine-meta-row\">\n <i class=\"fa-solid fa-backward-step\"></i>\n <span>Last run:</span>\n @if (routine.LastRunAt) {\n <span>{{ LastRunText(routine) }}</span>\n @if (routine.LastRunStatus) {\n <span [class]=\"ChipClass(LastRunVariant(routine.LastRunStatus))\">{{ routine.LastRunStatus }}</span>\n }\n } @else {\n <span class=\"routine-meta-muted\">never</span>\n }\n </div>\n <div class=\"routine-meta-row\">\n <i class=\"fa-solid fa-forward-step\"></i>\n <span>Next run:</span>\n @if (routine.NextRunAt) {\n <span>{{ NextRunText(routine) }}</span>\n } @else {\n <span class=\"routine-meta-muted\">not scheduled</span>\n }\n </div>\n </div>\n\n <div class=\"routine-card-actions\">\n <button mjButton variant=\"outline\" size=\"sm\"\n [disabled]=\"RunNowDisabled(routine)\"\n [title]=\"routine.Status === 'Active' ? 'Queue a run now (dispatcher picks it up within a minute)' : 'Only Active routines can be run'\"\n (click)=\"RunNow(routine)\">\n <i class=\"fa-solid fa-play\"></i> Run now\n </button>\n <button mjButton variant=\"outline\" size=\"sm\"\n [disabled]=\"BusyRoutineIDs.has(routine.ID)\"\n [title]=\"routine.Status === 'Active' ? 'Pause this routine' : 'Resume this routine'\"\n (click)=\"ToggleStatus(routine)\">\n <i class=\"fa-solid\" [class.fa-circle-pause]=\"routine.Status === 'Active'\" [class.fa-circle-play]=\"routine.Status !== 'Active'\"></i>\n {{ routine.Status === 'Active' ? 'Pause' : 'Resume' }}\n </button>\n <span class=\"routine-actions-spacer\"></span>\n <button mjButton variant=\"flat\" size=\"sm\" title=\"Edit routine\" (click)=\"EditRequested.emit(routine)\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" title=\"View run history\" (click)=\"OpenHistory(routine)\">\n <i class=\"fa-solid fa-timeline\"></i>\n </button>\n @if (routine.ConversationID) {\n <button mjButton variant=\"flat\" size=\"sm\" title=\"Open this routine's conversation\" (click)=\"OpenConversation(routine)\">\n <i class=\"fa-solid fa-comments\"></i>\n </button>\n }\n <button mjButton variant=\"flat\" size=\"sm\" title=\"Delete routine\"\n [disabled]=\"BusyRoutineIDs.has(routine.ID)\"\n (click)=\"DeleteRoutine(routine)\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n}\n"]}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
|
+
import { CompositeKey } from '@memberjunction/core';
|
|
4
|
+
import { MJUserRoutineEntity, MJUserRoutineRecipientEntity } from '@memberjunction/core-entities';
|
|
5
|
+
import { CronPresetKind } from '@memberjunction/global';
|
|
6
|
+
import { AfterNodeSelectEventArgs, TreeBranchConfig, TreeLeafConfig } from '@memberjunction/ng-trees';
|
|
7
|
+
import { RoutineSkillOption, RoutineTargetCatalog } from './routine-target-catalog';
|
|
8
|
+
import { AfterRoutineCreatedEventArgs, BeforeRoutineCreatedEventArgs } from './user-routines-events';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
/** One editable recipient row (existing rows carry their entity for update/delete). */
|
|
11
|
+
interface RecipientRow {
|
|
12
|
+
Entity: MJUserRoutineRecipientEntity | null;
|
|
13
|
+
Mode: 'user' | 'email';
|
|
14
|
+
UserID: string | null;
|
|
15
|
+
Email: string;
|
|
16
|
+
Channel: MJUserRoutineRecipientEntity['Channel'];
|
|
17
|
+
}
|
|
18
|
+
/** Minimal user shape for the recipient user picker. */
|
|
19
|
+
interface UserOption {
|
|
20
|
+
ID: string;
|
|
21
|
+
Name: string;
|
|
22
|
+
Email: string | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create/edit form for a User Routine. Routines run an AI AGENT on a schedule
|
|
26
|
+
* (TargetType is implicitly 'Agent') — the agent is chosen from a categorical tree
|
|
27
|
+
* grouped by Agent Category, showing each agent's own IconClass, with Realtime-type
|
|
28
|
+
* agents excluded (interactive-only). Also covers the initial message, optional JSON
|
|
29
|
+
* payload, AI Skills pre-activation, cron presets + advanced escape hatch, IANA
|
|
30
|
+
* timezone, activation window, notification settings, and the ordered recipients list.
|
|
31
|
+
*
|
|
32
|
+
* Reusable (Generic) component: no Router, no page chrome. The host mounts it
|
|
33
|
+
* (slide-in / dialog / inline), passes `RoutineID` (null = create), and reacts to
|
|
34
|
+
* `Saved` / `Cancelled` plus the cancelable `BeforeRoutineCreated` /
|
|
35
|
+
* `AfterRoutineCreated` pair for new routines. All persistence flows through MJ
|
|
36
|
+
* entity objects with explicit `Save()` boolean checks; failures surface
|
|
37
|
+
* `LatestResult.CompleteMessage`. Cached routine/recipient data comes from
|
|
38
|
+
* {@link UserRoutineEngine}.
|
|
39
|
+
*/
|
|
40
|
+
export declare class NewRoutineComponent extends BaseAngularComponent implements OnInit {
|
|
41
|
+
private cdr;
|
|
42
|
+
private notifications;
|
|
43
|
+
private _routineID;
|
|
44
|
+
/** ID of the routine to edit, or null to create a new one. */
|
|
45
|
+
set RoutineID(value: string | null);
|
|
46
|
+
get RoutineID(): string | null;
|
|
47
|
+
/** Emitted after a successful save (routine + recipients persisted) — create AND edit. */
|
|
48
|
+
Saved: EventEmitter<MJUserRoutineEntity>;
|
|
49
|
+
/** Emitted when the user cancels without saving. */
|
|
50
|
+
Cancelled: EventEmitter<void>;
|
|
51
|
+
/** Cancelable: fires before a NEW routine is saved for the first time. */
|
|
52
|
+
BeforeRoutineCreated: EventEmitter<BeforeRoutineCreatedEventArgs>;
|
|
53
|
+
/** Informational: fires after a new routine (and its recipients) was persisted. */
|
|
54
|
+
AfterRoutineCreated: EventEmitter<AfterRoutineCreatedEventArgs>;
|
|
55
|
+
Name: string;
|
|
56
|
+
Description: string;
|
|
57
|
+
/** The selected agent's ID (TargetType is implicitly 'Agent'). */
|
|
58
|
+
TargetID: string | null;
|
|
59
|
+
InitialMessage: string;
|
|
60
|
+
StartingPayloadText: string;
|
|
61
|
+
SelectedSkillIDs: string[];
|
|
62
|
+
RoutineType: MJUserRoutineEntity['RoutineType'];
|
|
63
|
+
ScheduleKind: CronPresetKind;
|
|
64
|
+
/** Minute past each hour for the hourly preset. */
|
|
65
|
+
ScheduleMinute: number;
|
|
66
|
+
/** "HH:MM" run time for daily/weekly/monthly presets. */
|
|
67
|
+
ScheduleTime: string;
|
|
68
|
+
ScheduleDayOfWeek: number;
|
|
69
|
+
ScheduleDayOfMonth: number;
|
|
70
|
+
RawCron: string;
|
|
71
|
+
Timezone: string;
|
|
72
|
+
StartAtLocal: string;
|
|
73
|
+
EndAtLocal: string;
|
|
74
|
+
NotifyCondition: MJUserRoutineEntity['NotifyCondition'];
|
|
75
|
+
NotifyViaInApp: boolean;
|
|
76
|
+
NotifyViaEmail: boolean;
|
|
77
|
+
Recipients: RecipientRow[];
|
|
78
|
+
/**
|
|
79
|
+
* Progressive disclosure: the basic view (name / agent / message / frequency)
|
|
80
|
+
* covers the 80% path; everything else lives behind this toggle. Auto-expands
|
|
81
|
+
* when editing a routine that already uses advanced settings.
|
|
82
|
+
*/
|
|
83
|
+
ShowAdvanced: boolean;
|
|
84
|
+
Catalog: RoutineTargetCatalog | null;
|
|
85
|
+
UserOptions: UserOption[];
|
|
86
|
+
TimezoneOptions: string[];
|
|
87
|
+
IsLoading: boolean;
|
|
88
|
+
IsSaving: boolean;
|
|
89
|
+
ValidationErrors: string[];
|
|
90
|
+
/** Tree config for the agent-category branches. */
|
|
91
|
+
AgentTreeBranchConfig: TreeBranchConfig;
|
|
92
|
+
/** Tree config for the pickable agents (built at load time — excludes Realtime types). */
|
|
93
|
+
AgentTreeLeafConfig: TreeLeafConfig | undefined;
|
|
94
|
+
/** Tree selection binding (single agent). */
|
|
95
|
+
SelectedAgentIDs: string[];
|
|
96
|
+
readonly DayNames: readonly string[];
|
|
97
|
+
readonly DayOfWeekOptions: {
|
|
98
|
+
text: string;
|
|
99
|
+
value: number;
|
|
100
|
+
}[];
|
|
101
|
+
readonly DayOfMonthOptions: {
|
|
102
|
+
text: string;
|
|
103
|
+
value: number;
|
|
104
|
+
}[];
|
|
105
|
+
readonly ScheduleKindOptions: Array<{
|
|
106
|
+
Value: CronPresetKind;
|
|
107
|
+
Label: string;
|
|
108
|
+
}>;
|
|
109
|
+
readonly NotifyConditionOptions: {
|
|
110
|
+
text: string;
|
|
111
|
+
value: string;
|
|
112
|
+
}[];
|
|
113
|
+
readonly ChannelOptions: {
|
|
114
|
+
text: string;
|
|
115
|
+
value: string;
|
|
116
|
+
}[];
|
|
117
|
+
readonly RecipientModeOptions: {
|
|
118
|
+
text: string;
|
|
119
|
+
value: string;
|
|
120
|
+
}[];
|
|
121
|
+
private editingEntity;
|
|
122
|
+
private deletedRecipients;
|
|
123
|
+
private initialized;
|
|
124
|
+
ngOnInit(): Promise<void>;
|
|
125
|
+
/** True when editing an existing routine (vs. creating a new one). */
|
|
126
|
+
get IsEdit(): boolean;
|
|
127
|
+
/** Active skills available for pre-activation. */
|
|
128
|
+
get SkillOptions(): RoutineSkillOption[];
|
|
129
|
+
/** Name of the currently selected agent (empty when none). */
|
|
130
|
+
get SelectedAgentName(): string;
|
|
131
|
+
/** IconClass of the currently selected agent (robot fallback). */
|
|
132
|
+
get SelectedAgentIcon(): string;
|
|
133
|
+
/** Live human-readable preview of the schedule being built. */
|
|
134
|
+
get SchedulePreview(): string;
|
|
135
|
+
/** Helper text under the RoutineType toggle. */
|
|
136
|
+
get RoutineTypeHelp(): string;
|
|
137
|
+
/** Handles agent selection from the category tree (leaf nodes only). */
|
|
138
|
+
/** The selected agent as a CompositeKey for the tree-dropdown's Value binding. */
|
|
139
|
+
get SelectedAgentKey(): CompositeKey | null;
|
|
140
|
+
OnAgentNodeSelected(args: AfterNodeSelectEventArgs): void;
|
|
141
|
+
SetScheduleKind(kind: CronPresetKind): void;
|
|
142
|
+
/** Toggles a skill in/out of the RequestedSkillIDs selection. */
|
|
143
|
+
ToggleSkill(skillID: string): void;
|
|
144
|
+
IsSkillSelected(skillID: string): boolean;
|
|
145
|
+
AddRecipient(): void;
|
|
146
|
+
RemoveRecipient(index: number): void;
|
|
147
|
+
/** Moves a recipient up/down — the saved Sequence is the row index. */
|
|
148
|
+
MoveRecipient(index: number, delta: -1 | 1): void;
|
|
149
|
+
/** When the row's mode flips, clear the other identity field. */
|
|
150
|
+
OnRecipientModeChange(row: RecipientRow): void;
|
|
151
|
+
Cancel(): void;
|
|
152
|
+
Save(): Promise<void>;
|
|
153
|
+
private engine;
|
|
154
|
+
/** True when the loaded routine differs from the basic-path defaults in any advanced field. */
|
|
155
|
+
private usesAdvancedSettings;
|
|
156
|
+
private reload;
|
|
157
|
+
/**
|
|
158
|
+
* Builds the agent tree leaf config: Active, root-level agents only, EXCLUDING
|
|
159
|
+
* agents whose type is the Realtime agent type. The exclusion is expressed as an
|
|
160
|
+
* inline NOT IN list of type IDs resolved from metadata BY NAME (never hardcoded).
|
|
161
|
+
*/
|
|
162
|
+
private buildAgentTreeConfig;
|
|
163
|
+
/** Realtime agent-type IDs resolved from the cached AI metadata by type NAME. */
|
|
164
|
+
private resolveRealtimeTypeIDs;
|
|
165
|
+
private resetForNew;
|
|
166
|
+
private loadExisting;
|
|
167
|
+
private applyCron;
|
|
168
|
+
private buildCron;
|
|
169
|
+
private parseScheduleTime;
|
|
170
|
+
private clampMinute;
|
|
171
|
+
/** Builds the editable recipient rows from the engine's cached recipients. */
|
|
172
|
+
private loadRecipientRows;
|
|
173
|
+
/** Lazily loads the user picker options the first time a user-mode row exists. */
|
|
174
|
+
private ensureUserOptions;
|
|
175
|
+
private validate;
|
|
176
|
+
/** Persists recipient rows in order (Sequence = index) and deletes removed rows. */
|
|
177
|
+
private saveRecipients;
|
|
178
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NewRoutineComponent, never>;
|
|
179
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NewRoutineComponent, "mj-new-routine", never, { "RoutineID": { "alias": "RoutineID"; "required": false; }; }, { "Saved": "Saved"; "Cancelled": "Cancelled"; "BeforeRoutineCreated": "BeforeRoutineCreated"; "AfterRoutineCreated": "AfterRoutineCreated"; }, never, never, false, never>;
|
|
180
|
+
}
|
|
181
|
+
export {};
|
|
182
|
+
//# sourceMappingURL=new-routine.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-routine.component.d.ts","sourceRoot":"","sources":["../../src/lib/new-routine.component.ts"],"names":[],"mappings":"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"}
|