@outbuild-company/schedule-core 1.22.0 → 1.23.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/cdn/schedule-core.global.js +1 -1
- package/dist/cdn/schedule-core.global.js.map +1 -1
- package/dist/index.cjs +82 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +84 -18
- package/dist/index.d.ts +84 -18
- package/dist/index.js +82 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -342,6 +342,7 @@ var LINK_REJECTION_REASON = {
|
|
|
342
342
|
// src/dispatch/action-kinds.ts
|
|
343
343
|
var DISPATCH_ACTION_KIND = {
|
|
344
344
|
ACTIVITY_CLIPBOARD_CLEAR: "activity-clipboard-clear",
|
|
345
|
+
ACTIVITY_CLIPBOARD_IMPORT: "activity-clipboard-import",
|
|
345
346
|
ACTIVITY_COPY: "activity-copy",
|
|
346
347
|
CALENDAR_RECONCILE: "calendar-reconcile",
|
|
347
348
|
ACTIVITY_PASTE_COPIED: "activity-paste-copied",
|
|
@@ -524,6 +525,7 @@ function createActivitiesApi(engine) {
|
|
|
524
525
|
hasChildren: (parentId) => engine.hasChild(parentId),
|
|
525
526
|
indentTargetParentIds: (ids) => engine.getIndentTargetParentIds(ids),
|
|
526
527
|
isCustomIdInUse: (customId, currentCustomId) => engine.isCustomIdInUse(customId, currentCustomId ?? null),
|
|
528
|
+
clipboard: () => engine.getActivityClipboardView(),
|
|
527
529
|
create: (input, options) => engine.dispatch(
|
|
528
530
|
{ ...input, kind: DISPATCH_ACTION_KIND.ACTIVITY_CREATE },
|
|
529
531
|
options
|
|
@@ -606,6 +608,12 @@ function createActivitiesApi(engine) {
|
|
|
606
608
|
...context,
|
|
607
609
|
kind: DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_CLEAR
|
|
608
610
|
}),
|
|
611
|
+
importClipboard: (snapshot, references, context = {}) => engine.dispatch({
|
|
612
|
+
...context,
|
|
613
|
+
kind: DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_IMPORT,
|
|
614
|
+
snapshot,
|
|
615
|
+
...references === void 0 ? {} : { references }
|
|
616
|
+
}),
|
|
609
617
|
lookaheadSync: (input) => engine.dispatch({
|
|
610
618
|
...input,
|
|
611
619
|
kind: DISPATCH_ACTION_KIND.ACTIVITY_LOOKAHEAD_SYNC
|
|
@@ -948,6 +956,7 @@ var REJECTION_REASON = {
|
|
|
948
956
|
ACTIVITY_IDS_EMPTY: "activity_ids_empty",
|
|
949
957
|
NO_ACTIVITY_SELECTION: "no_activity_selection",
|
|
950
958
|
CLIPBOARD_EMPTY: "clipboard_empty",
|
|
959
|
+
CLIPBOARD_SNAPSHOT_INVALID: "clipboard_snapshot_invalid",
|
|
951
960
|
ACTIVITY_PASTE_INVARIANT_FAILED: "activity_paste_invariant_failed",
|
|
952
961
|
SOLE_SCHEDULE_ROOT: "sole_schedule_root",
|
|
953
962
|
ANCHOR_SIBLING_CONFLICT: "anchor_sibling_conflict",
|
|
@@ -11744,6 +11753,7 @@ var NON_SCHEDULING_INLINE_COLUMNS = /* @__PURE__ */ new Set([
|
|
|
11744
11753
|
]);
|
|
11745
11754
|
var NON_SCHEDULING_KINDS = /* @__PURE__ */ new Set([
|
|
11746
11755
|
DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_CLEAR,
|
|
11756
|
+
DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_IMPORT,
|
|
11747
11757
|
DISPATCH_ACTION_KIND.ACTIVITY_COPY,
|
|
11748
11758
|
DISPATCH_ACTION_KIND.CELL_CLIPBOARD_CLEAR,
|
|
11749
11759
|
DISPATCH_ACTION_KIND.CELL_COPY,
|
|
@@ -11764,6 +11774,7 @@ var NON_SCHEDULING_KINDS = /* @__PURE__ */ new Set([
|
|
|
11764
11774
|
]);
|
|
11765
11775
|
var PURE_VIEW_STATE_KINDS = /* @__PURE__ */ new Set([
|
|
11766
11776
|
DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_CLEAR,
|
|
11777
|
+
DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_IMPORT,
|
|
11767
11778
|
DISPATCH_ACTION_KIND.ACTIVITY_COPY,
|
|
11768
11779
|
DISPATCH_ACTION_KIND.CELL_CLIPBOARD_CLEAR,
|
|
11769
11780
|
DISPATCH_ACTION_KIND.CELL_COPY,
|
|
@@ -18381,8 +18392,7 @@ function dispatchActivityCopy(action, deps) {
|
|
|
18381
18392
|
if (!selection.ok) return selection;
|
|
18382
18393
|
return { ...selection, changes: { ...selection.changes, source: action } };
|
|
18383
18394
|
}
|
|
18384
|
-
function
|
|
18385
|
-
clipboard.value = null;
|
|
18395
|
+
function clipboardOnlyResult(action) {
|
|
18386
18396
|
return {
|
|
18387
18397
|
ok: true,
|
|
18388
18398
|
changes: {
|
|
@@ -18394,6 +18404,57 @@ function dispatchActivityClipboardClear(action, clipboard) {
|
|
|
18394
18404
|
}
|
|
18395
18405
|
};
|
|
18396
18406
|
}
|
|
18407
|
+
function dispatchActivityClipboardClear(action, clipboard) {
|
|
18408
|
+
clipboard.value = null;
|
|
18409
|
+
return clipboardOnlyResult(action);
|
|
18410
|
+
}
|
|
18411
|
+
function keepKnownIds(ids, known) {
|
|
18412
|
+
if (ids === void 0 || known === void 0) return ids;
|
|
18413
|
+
const knownSet = new Set(known);
|
|
18414
|
+
return ids.filter((id) => knownSet.has(id));
|
|
18415
|
+
}
|
|
18416
|
+
function localizeOverrides(overrides, deps, references) {
|
|
18417
|
+
const localized = cloneDomainValue(overrides);
|
|
18418
|
+
const hasUnknownCalendar = localized.calendarId != null && !deps.calendars.has(localized.calendarId);
|
|
18419
|
+
if (hasUnknownCalendar) delete localized.calendarId;
|
|
18420
|
+
const hasUnknownSubcontract = references?.subcontractIds !== void 0 && localized.subcontractId != null && !references.subcontractIds.includes(localized.subcontractId);
|
|
18421
|
+
if (hasUnknownSubcontract) localized.subcontractId = null;
|
|
18422
|
+
const responsableIds = keepKnownIds(
|
|
18423
|
+
localized.responsableIds,
|
|
18424
|
+
references?.responsableIds
|
|
18425
|
+
);
|
|
18426
|
+
if (responsableIds !== void 0)
|
|
18427
|
+
localized.responsableIds = [...responsableIds];
|
|
18428
|
+
const tagIds = keepKnownIds(localized.tagIds, references?.tagIds);
|
|
18429
|
+
if (tagIds !== void 0) localized.tagIds = [...tagIds];
|
|
18430
|
+
return localized;
|
|
18431
|
+
}
|
|
18432
|
+
function hasDanglingLink(snapshot) {
|
|
18433
|
+
const copiedIds = new Set(
|
|
18434
|
+
snapshot.activities.map((entry) => String(entry.originalId))
|
|
18435
|
+
);
|
|
18436
|
+
return snapshot.links.some(
|
|
18437
|
+
(link) => !copiedIds.has(String(link.source)) || !copiedIds.has(String(link.target))
|
|
18438
|
+
);
|
|
18439
|
+
}
|
|
18440
|
+
function dispatchActivityClipboardImport(action, deps) {
|
|
18441
|
+
const { snapshot, references } = action;
|
|
18442
|
+
if (snapshot.activities.length === 0) {
|
|
18443
|
+
return { ok: false, reason: REJECTION_REASON.CLIPBOARD_EMPTY };
|
|
18444
|
+
}
|
|
18445
|
+
if (hasDanglingLink(snapshot)) {
|
|
18446
|
+
return { ok: false, reason: REJECTION_REASON.CLIPBOARD_SNAPSHOT_INVALID };
|
|
18447
|
+
}
|
|
18448
|
+
deps.clipboard.value = {
|
|
18449
|
+
activities: snapshot.activities.map((entry) => ({
|
|
18450
|
+
originalId: entry.originalId,
|
|
18451
|
+
originalParentId: entry.originalParentId,
|
|
18452
|
+
overrides: localizeOverrides(entry.overrides, deps, references)
|
|
18453
|
+
})),
|
|
18454
|
+
links: snapshot.links.map((link) => cloneDomainValue(link))
|
|
18455
|
+
};
|
|
18456
|
+
return clipboardOnlyResult(action);
|
|
18457
|
+
}
|
|
18397
18458
|
|
|
18398
18459
|
// src/activity-copy-paste/paste.ts
|
|
18399
18460
|
function resolveDestination(afterSiblingId, adapter) {
|
|
@@ -18999,6 +19060,12 @@ async function performDispatch(action, options, deps) {
|
|
|
18999
19060
|
if (action.kind === DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_CLEAR) {
|
|
19000
19061
|
return dispatchActivityClipboardClear(action, deps.activityClipboard);
|
|
19001
19062
|
}
|
|
19063
|
+
if (action.kind === DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_IMPORT) {
|
|
19064
|
+
return dispatchActivityClipboardImport(action, {
|
|
19065
|
+
clipboard: deps.activityClipboard,
|
|
19066
|
+
calendars: deps.calendars
|
|
19067
|
+
});
|
|
19068
|
+
}
|
|
19002
19069
|
if (action.kind === DISPATCH_ACTION_KIND.ACTIVITY_PASTE_COPIED) {
|
|
19003
19070
|
return dispatchActivityPasteCopied(action, options, deps);
|
|
19004
19071
|
}
|
|
@@ -23415,7 +23482,7 @@ function getDispatchHistoryPolicy(action) {
|
|
|
23415
23482
|
if (action.kind === DISPATCH_ACTION_KIND.PERSISTENCE_ACKNOWLEDGE) {
|
|
23416
23483
|
return DISPATCH_HISTORY_POLICY.CHECKPOINT_ON_SUCCESS;
|
|
23417
23484
|
}
|
|
23418
|
-
if (action.kind === DISPATCH_ACTION_KIND.SIR_SYNC || action.kind === DISPATCH_ACTION_KIND.CALENDAR_RECONCILE || action.kind === DISPATCH_ACTION_KIND.ACTIVITY_LOOKAHEAD_SYNC || action.kind === DISPATCH_ACTION_KIND.BASELINE_APPLY || action.kind === DISPATCH_ACTION_KIND.PONDERATOR_CRITERION_SET || action.kind === DISPATCH_ACTION_KIND.STATUS_CRITERIA_SET || action.kind === DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_CLEAR || action.kind === DISPATCH_ACTION_KIND.ACTIVITY_COPY || action.kind === DISPATCH_ACTION_KIND.SELECTION_TOGGLE || action.kind === DISPATCH_ACTION_KIND.SELECTION_REPLACE || action.kind === DISPATCH_ACTION_KIND.VISIBILITY_SET || action.kind === DISPATCH_ACTION_KIND.FILTER_SET || action.kind === DISPATCH_ACTION_KIND.SORT_SET || action.kind === DISPATCH_ACTION_KIND.VIEW_ATTRIBUTES_SET || action.kind === DISPATCH_ACTION_KIND.GROUP_SET || action.kind === DISPATCH_ACTION_KIND.WBS_DEPTH_SET) {
|
|
23485
|
+
if (action.kind === DISPATCH_ACTION_KIND.SIR_SYNC || action.kind === DISPATCH_ACTION_KIND.CALENDAR_RECONCILE || action.kind === DISPATCH_ACTION_KIND.ACTIVITY_LOOKAHEAD_SYNC || action.kind === DISPATCH_ACTION_KIND.BASELINE_APPLY || action.kind === DISPATCH_ACTION_KIND.PONDERATOR_CRITERION_SET || action.kind === DISPATCH_ACTION_KIND.STATUS_CRITERIA_SET || action.kind === DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_CLEAR || action.kind === DISPATCH_ACTION_KIND.ACTIVITY_CLIPBOARD_IMPORT || action.kind === DISPATCH_ACTION_KIND.ACTIVITY_COPY || action.kind === DISPATCH_ACTION_KIND.SELECTION_TOGGLE || action.kind === DISPATCH_ACTION_KIND.SELECTION_REPLACE || action.kind === DISPATCH_ACTION_KIND.VISIBILITY_SET || action.kind === DISPATCH_ACTION_KIND.FILTER_SET || action.kind === DISPATCH_ACTION_KIND.SORT_SET || action.kind === DISPATCH_ACTION_KIND.VIEW_ATTRIBUTES_SET || action.kind === DISPATCH_ACTION_KIND.GROUP_SET || action.kind === DISPATCH_ACTION_KIND.WBS_DEPTH_SET) {
|
|
23419
23486
|
return DISPATCH_HISTORY_POLICY.SKIP;
|
|
23420
23487
|
}
|
|
23421
23488
|
return DISPATCH_HISTORY_POLICY.RECORD;
|
|
@@ -31171,6 +31238,18 @@ var ScheduleCore = class _ScheduleCore {
|
|
|
31171
31238
|
this.assertReady();
|
|
31172
31239
|
return readSelectedActivityIds(this.coreRuntime.state);
|
|
31173
31240
|
}
|
|
31241
|
+
/**
|
|
31242
|
+
* Reads the core-owned activity clipboard as a portable snapshot.
|
|
31243
|
+
*
|
|
31244
|
+
* The snapshot can be imported into another `ScheduleCore` through the
|
|
31245
|
+
* `activity-clipboard-import` command, which is how a copy survives the
|
|
31246
|
+
* replacement of the schedule instance.
|
|
31247
|
+
* @returns A defensive copy, or `null` when nothing has been copied.
|
|
31248
|
+
*/
|
|
31249
|
+
getActivityClipboardView() {
|
|
31250
|
+
this.assertReady();
|
|
31251
|
+
return cloneDomainValue(this._activityClipboard.value);
|
|
31252
|
+
}
|
|
31174
31253
|
/** @returns A defensive snapshot of explicitly hidden activity IDs. */
|
|
31175
31254
|
getHiddenActivityIds() {
|
|
31176
31255
|
this.assertReady();
|