@memberjunction/core-actions 5.34.1 → 5.36.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/custom/communication/send-to-audience.action.d.ts +36 -0
- package/dist/custom/communication/send-to-audience.action.d.ts.map +1 -0
- package/dist/custom/communication/send-to-audience.action.js +148 -0
- package/dist/custom/communication/send-to-audience.action.js.map +1 -0
- package/dist/custom/geo/scheduled-geocoding.action.d.ts +22 -1
- package/dist/custom/geo/scheduled-geocoding.action.d.ts.map +1 -1
- package/dist/custom/geo/scheduled-geocoding.action.js +35 -3
- package/dist/custom/geo/scheduled-geocoding.action.js.map +1 -1
- package/dist/custom/lists/_action-helpers.d.ts +12 -0
- package/dist/custom/lists/_action-helpers.d.ts.map +1 -0
- package/dist/custom/lists/_action-helpers.js +42 -0
- package/dist/custom/lists/_action-helpers.js.map +1 -0
- package/dist/custom/lists/add-view-results-to-list.action.d.ts +21 -0
- package/dist/custom/lists/add-view-results-to-list.action.d.ts.map +1 -0
- package/dist/custom/lists/add-view-results-to-list.action.js +50 -0
- package/dist/custom/lists/add-view-results-to-list.action.js.map +1 -0
- package/dist/custom/lists/bulk-update-list-item-status.action.d.ts +6 -0
- package/dist/custom/lists/bulk-update-list-item-status.action.d.ts.map +1 -0
- package/dist/custom/lists/bulk-update-list-item-status.action.js +89 -0
- package/dist/custom/lists/bulk-update-list-item-status.action.js.map +1 -0
- package/dist/custom/lists/compose-lists.action.d.ts +30 -0
- package/dist/custom/lists/compose-lists.action.d.ts.map +1 -0
- package/dist/custom/lists/compose-lists.action.js +90 -0
- package/dist/custom/lists/compose-lists.action.js.map +1 -0
- package/dist/custom/lists/index.d.ts +17 -2
- package/dist/custom/lists/index.d.ts.map +1 -1
- package/dist/custom/lists/index.js +17 -2
- package/dist/custom/lists/index.js.map +1 -1
- package/dist/custom/lists/invite-to-list.action.d.ts +17 -0
- package/dist/custom/lists/invite-to-list.action.d.ts.map +1 -0
- package/dist/custom/lists/invite-to-list.action.js +52 -0
- package/dist/custom/lists/invite-to-list.action.js.map +1 -0
- package/dist/custom/lists/materialize-list-from-view.action.d.ts +26 -0
- package/dist/custom/lists/materialize-list-from-view.action.d.ts.map +1 -0
- package/dist/custom/lists/materialize-list-from-view.action.js +71 -0
- package/dist/custom/lists/materialize-list-from-view.action.js.map +1 -0
- package/dist/custom/lists/move-list-members.action.d.ts +20 -0
- package/dist/custom/lists/move-list-members.action.d.ts.map +1 -0
- package/dist/custom/lists/move-list-members.action.js +150 -0
- package/dist/custom/lists/move-list-members.action.js.map +1 -0
- package/dist/custom/lists/refresh-list-from-source.action.d.ts +15 -0
- package/dist/custom/lists/refresh-list-from-source.action.d.ts.map +1 -0
- package/dist/custom/lists/refresh-list-from-source.action.js +50 -0
- package/dist/custom/lists/refresh-list-from-source.action.js.map +1 -0
- package/dist/custom/lists/resolve-audience.action.d.ts +16 -0
- package/dist/custom/lists/resolve-audience.action.d.ts.map +1 -0
- package/dist/custom/lists/resolve-audience.action.js +59 -0
- package/dist/custom/lists/resolve-audience.action.js.map +1 -0
- package/dist/custom/lists/revoke-list-invitation.action.d.ts +12 -0
- package/dist/custom/lists/revoke-list-invitation.action.d.ts.map +1 -0
- package/dist/custom/lists/revoke-list-invitation.action.js +31 -0
- package/dist/custom/lists/revoke-list-invitation.action.js.map +1 -0
- package/dist/custom/lists/share-list.action.d.ts +16 -0
- package/dist/custom/lists/share-list.action.d.ts.map +1 -0
- package/dist/custom/lists/share-list.action.js +56 -0
- package/dist/custom/lists/share-list.action.js.map +1 -0
- package/dist/custom/lists/unshare-list.action.d.ts +11 -0
- package/dist/custom/lists/unshare-list.action.d.ts.map +1 -0
- package/dist/custom/lists/unshare-list.action.js +30 -0
- package/dist/custom/lists/unshare-list.action.js.map +1 -0
- package/dist/custom/utilities/address-services.action.d.ts.map +1 -1
- package/dist/custom/utilities/address-services.action.js +98 -94
- package/dist/custom/utilities/address-services.action.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +32 -30
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { Metadata, RunView } from '@memberjunction/core';
|
|
9
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
10
|
+
import { addOutputParam, getJsonParam, getStringParam, missingParam, } from './_action-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Bulk-update the `Status` field on `MJ: List Detail` rows for a given
|
|
13
|
+
* list. Useful for review-style workflows where reviewers triage list
|
|
14
|
+
* items as Active / Complete / Disabled / Rejected.
|
|
15
|
+
*
|
|
16
|
+
* Params:
|
|
17
|
+
* - ListID (required)
|
|
18
|
+
* - RecordIDs: JSON-stringified array of RecordID values to update.
|
|
19
|
+
* - NewStatus: must match the MJ: List Detail Status check constraint
|
|
20
|
+
* (Active / Complete / Disabled / Error / Other / Pending / Rejected).
|
|
21
|
+
*/
|
|
22
|
+
const ALLOWED_STATUSES = ['Active', 'Complete', 'Disabled', 'Error', 'Other', 'Pending', 'Rejected'];
|
|
23
|
+
let BulkUpdateListItemStatusAction = class BulkUpdateListItemStatusAction extends BaseAction {
|
|
24
|
+
async InternalRunAction(params) {
|
|
25
|
+
const listId = getStringParam(params, 'ListID');
|
|
26
|
+
const recordIds = getJsonParam(params, 'RecordIDs');
|
|
27
|
+
const newStatus = getStringParam(params, 'NewStatus');
|
|
28
|
+
if (!listId)
|
|
29
|
+
return missingParam('ListID');
|
|
30
|
+
if (!recordIds || !Array.isArray(recordIds) || recordIds.length === 0) {
|
|
31
|
+
return {
|
|
32
|
+
Success: false,
|
|
33
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
34
|
+
Message: "'RecordIDs' must be a JSON-stringified non-empty string array",
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (!newStatus || !ALLOWED_STATUSES.includes(newStatus)) {
|
|
38
|
+
return {
|
|
39
|
+
Success: false,
|
|
40
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
41
|
+
Message: `NewStatus must be one of: ${ALLOWED_STATUSES.join(', ')} (got '${newStatus ?? ''}')`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const md = params.Provider ?? new Metadata();
|
|
45
|
+
const rv = params.Provider ? RunView.FromMetadataProvider(params.Provider) : new RunView();
|
|
46
|
+
const filter = recordIds.map((id) => `'${id.replace(/'/g, "''")}'`).join(',');
|
|
47
|
+
const lookup = await rv.RunView({
|
|
48
|
+
EntityName: 'MJ: List Details',
|
|
49
|
+
ExtraFilter: `ListID='${listId}' AND RecordID IN (${filter})`,
|
|
50
|
+
ResultType: 'entity_object',
|
|
51
|
+
}, params.ContextUser);
|
|
52
|
+
if (!lookup.Success) {
|
|
53
|
+
return {
|
|
54
|
+
Success: false,
|
|
55
|
+
ResultCode: 'UNEXPECTED_ERROR',
|
|
56
|
+
Message: `Failed to load list details: ${lookup.ErrorMessage}`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
let updated = 0;
|
|
60
|
+
let failed = 0;
|
|
61
|
+
const errors = [];
|
|
62
|
+
for (const detail of lookup.Results ?? []) {
|
|
63
|
+
detail.Status = newStatus;
|
|
64
|
+
const ok = await detail.Save();
|
|
65
|
+
if (ok) {
|
|
66
|
+
updated++;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
failed++;
|
|
70
|
+
errors.push(`Failed to update '${detail.RecordID}': ${detail.LatestResult?.CompleteMessage ?? 'unknown'}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
addOutputParam(params, 'Updated', updated);
|
|
74
|
+
addOutputParam(params, 'Failed', failed);
|
|
75
|
+
addOutputParam(params, 'Errors', errors);
|
|
76
|
+
return {
|
|
77
|
+
Success: failed === 0,
|
|
78
|
+
ResultCode: failed === 0 ? 'SUCCESS' : 'PARTIAL_SUCCESS',
|
|
79
|
+
Message: failed === 0
|
|
80
|
+
? `Updated ${updated} item(s) to '${newStatus}'`
|
|
81
|
+
: `Updated ${updated}, ${failed} failed`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
BulkUpdateListItemStatusAction = __decorate([
|
|
86
|
+
RegisterClass(BaseAction, 'Bulk Update List Item Status')
|
|
87
|
+
], BulkUpdateListItemStatusAction);
|
|
88
|
+
export { BulkUpdateListItemStatusAction };
|
|
89
|
+
//# sourceMappingURL=bulk-update-list-item-status.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-update-list-item-status.action.js","sourceRoot":"","sources":["../../../src/custom/lists/bulk-update-list-item-status.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
2
|
+
import type { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
3
|
+
/**
|
|
4
|
+
* Compose multiple List or View sources into a delta via a set-op
|
|
5
|
+
* (union / intersection / difference). Preview-only mode (no Target) is
|
|
6
|
+
* the default; supplying a target list projects the result back into the
|
|
7
|
+
* target — which can trigger the drop-guard.
|
|
8
|
+
*
|
|
9
|
+
* Inputs serialization: `Inputs` is a JSON-stringified array of
|
|
10
|
+
* `ListSource` objects, each `{kind: 'list'|'view'|'adhoc', ...}`. The
|
|
11
|
+
* `Target` parameter follows the same shape (single object).
|
|
12
|
+
*
|
|
13
|
+
* @example Preview a union of two views:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* await runAction({
|
|
16
|
+
* ActionName: 'Compose Lists',
|
|
17
|
+
* Params: [
|
|
18
|
+
* { Name: 'Op', Value: 'union' },
|
|
19
|
+
* { Name: 'Inputs', Value: JSON.stringify([
|
|
20
|
+
* { kind: 'view', viewId: 'v1' },
|
|
21
|
+
* { kind: 'view', viewId: 'v2' }
|
|
22
|
+
* ]) }
|
|
23
|
+
* ]
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare class ComposeListsAction extends BaseAction {
|
|
28
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=compose-lists.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-lists.action.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/compose-lists.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAaxF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBACa,kBAAmB,SAAQ,UAAU;cAChC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA0DxF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { ListOperations } from '@memberjunction/lists';
|
|
10
|
+
import { addOutputParam, getBooleanParam, getJsonParam, getStringParam, missingParam, } from './_action-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Compose multiple List or View sources into a delta via a set-op
|
|
13
|
+
* (union / intersection / difference). Preview-only mode (no Target) is
|
|
14
|
+
* the default; supplying a target list projects the result back into the
|
|
15
|
+
* target — which can trigger the drop-guard.
|
|
16
|
+
*
|
|
17
|
+
* Inputs serialization: `Inputs` is a JSON-stringified array of
|
|
18
|
+
* `ListSource` objects, each `{kind: 'list'|'view'|'adhoc', ...}`. The
|
|
19
|
+
* `Target` parameter follows the same shape (single object).
|
|
20
|
+
*
|
|
21
|
+
* @example Preview a union of two views:
|
|
22
|
+
* ```typescript
|
|
23
|
+
* await runAction({
|
|
24
|
+
* ActionName: 'Compose Lists',
|
|
25
|
+
* Params: [
|
|
26
|
+
* { Name: 'Op', Value: 'union' },
|
|
27
|
+
* { Name: 'Inputs', Value: JSON.stringify([
|
|
28
|
+
* { kind: 'view', viewId: 'v1' },
|
|
29
|
+
* { kind: 'view', viewId: 'v2' }
|
|
30
|
+
* ]) }
|
|
31
|
+
* ]
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
let ComposeListsAction = class ComposeListsAction extends BaseAction {
|
|
36
|
+
async InternalRunAction(params) {
|
|
37
|
+
const op = getStringParam(params, 'Op');
|
|
38
|
+
if (!op)
|
|
39
|
+
return missingParam('Op');
|
|
40
|
+
if (op !== 'union' && op !== 'intersection' && op !== 'difference') {
|
|
41
|
+
return {
|
|
42
|
+
Success: false,
|
|
43
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
44
|
+
Message: `Op must be one of: union | intersection | difference (got '${op}')`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const inputs = getJsonParam(params, 'Inputs');
|
|
48
|
+
if (!inputs || !Array.isArray(inputs) || inputs.length < 2) {
|
|
49
|
+
return {
|
|
50
|
+
Success: false,
|
|
51
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
52
|
+
Message: "'Inputs' must be a JSON-stringified array of at least 2 ListSource objects",
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const target = getJsonParam(params, 'Target');
|
|
56
|
+
const confirmDrops = getBooleanParam(params, 'ConfirmDrops', false);
|
|
57
|
+
const ops = new ListOperations(params.ContextUser, params.Provider);
|
|
58
|
+
const delta = await ops.ComputeSetOp(op, inputs, target);
|
|
59
|
+
// Preview-only path: no commit. Surface the delta details as outputs.
|
|
60
|
+
addOutputParam(params, 'DeltaToken', delta.DeltaToken);
|
|
61
|
+
addOutputParam(params, 'Add', delta.Counts.Add);
|
|
62
|
+
addOutputParam(params, 'Remove', delta.Counts.Remove);
|
|
63
|
+
addOutputParam(params, 'Unchanged', delta.Counts.Unchanged);
|
|
64
|
+
addOutputParam(params, 'Warnings', delta.Warnings.map((w) => ({ Code: w.Code, Message: w.Message })));
|
|
65
|
+
// If no target, this is a preview-only operation — we don't auto-apply.
|
|
66
|
+
if (!target) {
|
|
67
|
+
return {
|
|
68
|
+
Success: true,
|
|
69
|
+
ResultCode: 'SUCCESS',
|
|
70
|
+
Message: `Set-op preview: +${delta.Counts.Add} / -${delta.Counts.Remove} (Target omitted — no changes applied)`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// Target provided — commit via ApplyDelta. The drop-guard is enforced
|
|
74
|
+
// server-side: if Remove>0 and ConfirmDrops=false, ApplyDelta rejects.
|
|
75
|
+
const apply = await ops.ApplyDelta(delta, { ConfirmDrops: confirmDrops, DeltaToken: delta.DeltaToken });
|
|
76
|
+
addOutputParam(params, 'Added', apply.Counts?.Added);
|
|
77
|
+
addOutputParam(params, 'Removed', apply.Counts?.Removed);
|
|
78
|
+
addOutputParam(params, 'Failed', apply.Counts?.Failed);
|
|
79
|
+
return {
|
|
80
|
+
Success: apply.Success,
|
|
81
|
+
ResultCode: apply.ResultCode,
|
|
82
|
+
Message: apply.Message,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
ComposeListsAction = __decorate([
|
|
87
|
+
RegisterClass(BaseAction, 'Compose Lists')
|
|
88
|
+
], ComposeListsAction);
|
|
89
|
+
export { ComposeListsAction };
|
|
90
|
+
//# sourceMappingURL=compose-lists.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-lists.action.js","sourceRoot":"","sources":["../../../src/custom/lists/compose-lists.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,16 +6,31 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Available Actions:
|
|
8
8
|
* - Add Records to List: Add one or more records to a list
|
|
9
|
-
* -
|
|
9
|
+
* - Add View Results To List: Append a view's results to a list (additive only)
|
|
10
|
+
* - Compose Lists: Set-op preview / commit across List + View inputs
|
|
10
11
|
* - Create List: Create a new list with optional initial records
|
|
11
12
|
* - Get List Records: Retrieve records from a list with filtering
|
|
12
13
|
* - Get Record List Membership: Find which lists contain a specific record
|
|
14
|
+
* - Materialize List From View: Create a new list from a view's results, with optional lineage
|
|
15
|
+
* - Refresh List From Source: Refresh an existing lineage-bearing list against its source
|
|
16
|
+
* - Remove Records from List: Remove records from a list
|
|
13
17
|
* - Update List Item Status: Bulk update status on list items
|
|
14
18
|
*/
|
|
15
19
|
export * from './add-records-to-list.action.js';
|
|
16
|
-
export * from './
|
|
20
|
+
export * from './add-view-results-to-list.action.js';
|
|
21
|
+
export * from './bulk-update-list-item-status.action.js';
|
|
22
|
+
export * from './compose-lists.action.js';
|
|
17
23
|
export * from './create-list.action.js';
|
|
18
24
|
export * from './get-list-records.action.js';
|
|
19
25
|
export * from './get-record-list-membership.action.js';
|
|
26
|
+
export * from './invite-to-list.action.js';
|
|
27
|
+
export * from './materialize-list-from-view.action.js';
|
|
28
|
+
export * from './move-list-members.action.js';
|
|
29
|
+
export * from './refresh-list-from-source.action.js';
|
|
30
|
+
export * from './remove-records-from-list.action.js';
|
|
31
|
+
export * from './resolve-audience.action.js';
|
|
32
|
+
export * from './revoke-list-invitation.action.js';
|
|
33
|
+
export * from './share-list.action.js';
|
|
34
|
+
export * from './unshare-list.action.js';
|
|
20
35
|
export * from './update-list-item-status.action.js';
|
|
21
36
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qCAAqC,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC"}
|
|
@@ -6,16 +6,31 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Available Actions:
|
|
8
8
|
* - Add Records to List: Add one or more records to a list
|
|
9
|
-
* -
|
|
9
|
+
* - Add View Results To List: Append a view's results to a list (additive only)
|
|
10
|
+
* - Compose Lists: Set-op preview / commit across List + View inputs
|
|
10
11
|
* - Create List: Create a new list with optional initial records
|
|
11
12
|
* - Get List Records: Retrieve records from a list with filtering
|
|
12
13
|
* - Get Record List Membership: Find which lists contain a specific record
|
|
14
|
+
* - Materialize List From View: Create a new list from a view's results, with optional lineage
|
|
15
|
+
* - Refresh List From Source: Refresh an existing lineage-bearing list against its source
|
|
16
|
+
* - Remove Records from List: Remove records from a list
|
|
13
17
|
* - Update List Item Status: Bulk update status on list items
|
|
14
18
|
*/
|
|
15
19
|
export * from './add-records-to-list.action.js';
|
|
16
|
-
export * from './
|
|
20
|
+
export * from './add-view-results-to-list.action.js';
|
|
21
|
+
export * from './bulk-update-list-item-status.action.js';
|
|
22
|
+
export * from './compose-lists.action.js';
|
|
17
23
|
export * from './create-list.action.js';
|
|
18
24
|
export * from './get-list-records.action.js';
|
|
19
25
|
export * from './get-record-list-membership.action.js';
|
|
26
|
+
export * from './invite-to-list.action.js';
|
|
27
|
+
export * from './materialize-list-from-view.action.js';
|
|
28
|
+
export * from './move-list-members.action.js';
|
|
29
|
+
export * from './refresh-list-from-source.action.js';
|
|
30
|
+
export * from './remove-records-from-list.action.js';
|
|
31
|
+
export * from './resolve-audience.action.js';
|
|
32
|
+
export * from './revoke-list-invitation.action.js';
|
|
33
|
+
export * from './share-list.action.js';
|
|
34
|
+
export * from './unshare-list.action.js';
|
|
20
35
|
export * from './update-list-item-status.action.js';
|
|
21
36
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/custom/lists/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/custom/lists/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qCAAqC,CAAC;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qCAAqC,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
2
|
+
import type { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
3
|
+
/**
|
|
4
|
+
* Issue a pending-email invitation to share a List. Returns the
|
|
5
|
+
* generated token + expiry — the caller (workflow / agent) is expected
|
|
6
|
+
* to deliver an accept link to the recipient.
|
|
7
|
+
*
|
|
8
|
+
* Params:
|
|
9
|
+
* - ListID (required)
|
|
10
|
+
* - Email (required)
|
|
11
|
+
* - Role: 'Editor' | 'Viewer' (default 'Viewer')
|
|
12
|
+
* - TtlHours (optional; default 7 days)
|
|
13
|
+
*/
|
|
14
|
+
export declare class InviteToListAction extends BaseAction {
|
|
15
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=invite-to-list.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-to-list.action.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/invite-to-list.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAMxF;;;;;;;;;;GAUG;AACH,qBACa,kBAAmB,SAAQ,UAAU;cAChC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAwBxF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { ListSharing } from '@memberjunction/lists';
|
|
10
|
+
import { addOutputParam, getStringParam, missingParam } from './_action-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Issue a pending-email invitation to share a List. Returns the
|
|
13
|
+
* generated token + expiry — the caller (workflow / agent) is expected
|
|
14
|
+
* to deliver an accept link to the recipient.
|
|
15
|
+
*
|
|
16
|
+
* Params:
|
|
17
|
+
* - ListID (required)
|
|
18
|
+
* - Email (required)
|
|
19
|
+
* - Role: 'Editor' | 'Viewer' (default 'Viewer')
|
|
20
|
+
* - TtlHours (optional; default 7 days)
|
|
21
|
+
*/
|
|
22
|
+
let InviteToListAction = class InviteToListAction extends BaseAction {
|
|
23
|
+
async InternalRunAction(params) {
|
|
24
|
+
const listId = getStringParam(params, 'ListID');
|
|
25
|
+
const email = getStringParam(params, 'Email');
|
|
26
|
+
if (!listId)
|
|
27
|
+
return missingParam('ListID');
|
|
28
|
+
if (!email)
|
|
29
|
+
return missingParam('Email');
|
|
30
|
+
const role = (getStringParam(params, 'Role') ?? 'Viewer');
|
|
31
|
+
if (role !== 'Editor' && role !== 'Viewer') {
|
|
32
|
+
return {
|
|
33
|
+
Success: false,
|
|
34
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
35
|
+
Message: `Role must be Editor or Viewer (got '${role}')`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const ttlHoursRaw = getStringParam(params, 'TtlHours');
|
|
39
|
+
const ttlMs = ttlHoursRaw != null ? Number(ttlHoursRaw) * 60 * 60 * 1000 : undefined;
|
|
40
|
+
const sharing = new ListSharing(params.ContextUser, params.Provider);
|
|
41
|
+
const result = await sharing.Invite({ ListID: listId, Email: email, Role: role, TtlMs: ttlMs });
|
|
42
|
+
addOutputParam(params, 'InvitationID', result.InvitationID);
|
|
43
|
+
addOutputParam(params, 'Token', result.Token);
|
|
44
|
+
addOutputParam(params, 'ExpiresAt', result.ExpiresAt?.toISOString());
|
|
45
|
+
return { Success: result.Success, ResultCode: result.ResultCode, Message: result.Message };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
InviteToListAction = __decorate([
|
|
49
|
+
RegisterClass(BaseAction, 'Invite To List')
|
|
50
|
+
], InviteToListAction);
|
|
51
|
+
export { InviteToListAction };
|
|
52
|
+
//# sourceMappingURL=invite-to-list.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-to-list.action.js","sourceRoot":"","sources":["../../../src/custom/lists/invite-to-list.action.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjF;;;;;;;;;;GAUG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,UAAU;IACtC,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACvD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM;YAAE,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAwB,CAAC;QACjF,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,mBAAmB;gBAC/B,OAAO,EAAE,uCAAuC,IAAI,IAAI;aACzD,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAErF,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChG,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5D,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC7F,CAAC;CACF,CAAA;AAzBY,kBAAkB;IAD9B,aAAa,CAAC,UAAU,EAAE,gBAAgB,CAAC;GAC/B,kBAAkB,CAyB9B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
2
|
+
import type { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
3
|
+
/**
|
|
4
|
+
* Materialize a new MJ List from a User View. Thin wrapper around
|
|
5
|
+
* `ListOperations.MaterializeFromView` — every drop-guard, permission, and
|
|
6
|
+
* lineage semantic is owned by the core. The Action exposes the same
|
|
7
|
+
* capability to agents / workflows / scheduled jobs.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* await runAction({
|
|
12
|
+
* ActionName: 'Materialize List From View',
|
|
13
|
+
* Params: [
|
|
14
|
+
* { Name: 'ViewID', Value: 'abc-...' },
|
|
15
|
+
* { Name: 'ListName', Value: 'Q4 Donors' },
|
|
16
|
+
* { Name: 'RememberLineage', Value: true },
|
|
17
|
+
* { Name: 'UseSnapshot', Value: false },
|
|
18
|
+
* { Name: 'RefreshMode', Value: 'Additive' }
|
|
19
|
+
* ]
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare class MaterializeListFromViewAction extends BaseAction {
|
|
24
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=materialize-list-from-view.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-list-from-view.action.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/materialize-list-from-view.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAYxF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBACa,6BAA8B,SAAQ,UAAU;cAC3C,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAqCxF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { ListOperations } from '@memberjunction/lists';
|
|
10
|
+
import { addOutputParam, getBooleanParam, getStringParam, missingParam, } from './_action-helpers.js';
|
|
11
|
+
/**
|
|
12
|
+
* Materialize a new MJ List from a User View. Thin wrapper around
|
|
13
|
+
* `ListOperations.MaterializeFromView` — every drop-guard, permission, and
|
|
14
|
+
* lineage semantic is owned by the core. The Action exposes the same
|
|
15
|
+
* capability to agents / workflows / scheduled jobs.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* await runAction({
|
|
20
|
+
* ActionName: 'Materialize List From View',
|
|
21
|
+
* Params: [
|
|
22
|
+
* { Name: 'ViewID', Value: 'abc-...' },
|
|
23
|
+
* { Name: 'ListName', Value: 'Q4 Donors' },
|
|
24
|
+
* { Name: 'RememberLineage', Value: true },
|
|
25
|
+
* { Name: 'UseSnapshot', Value: false },
|
|
26
|
+
* { Name: 'RefreshMode', Value: 'Additive' }
|
|
27
|
+
* ]
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
let MaterializeListFromViewAction = class MaterializeListFromViewAction extends BaseAction {
|
|
32
|
+
async InternalRunAction(params) {
|
|
33
|
+
const viewId = getStringParam(params, 'ViewID');
|
|
34
|
+
const listName = getStringParam(params, 'ListName');
|
|
35
|
+
if (!viewId)
|
|
36
|
+
return missingParam('ViewID');
|
|
37
|
+
if (!listName)
|
|
38
|
+
return missingParam('ListName');
|
|
39
|
+
const refreshMode = (getStringParam(params, 'RefreshMode') ?? 'Additive');
|
|
40
|
+
if (refreshMode !== 'Additive' && refreshMode !== 'Sync') {
|
|
41
|
+
return {
|
|
42
|
+
Success: false,
|
|
43
|
+
ResultCode: 'INVALID_PARAMETER',
|
|
44
|
+
Message: `RefreshMode must be 'Additive' or 'Sync', got '${refreshMode}'`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const opts = {
|
|
48
|
+
ListName: listName,
|
|
49
|
+
CategoryId: getStringParam(params, 'CategoryID'),
|
|
50
|
+
Description: getStringParam(params, 'Description'),
|
|
51
|
+
RememberLineage: getBooleanParam(params, 'RememberLineage', true),
|
|
52
|
+
UseSnapshot: getBooleanParam(params, 'UseSnapshot', false),
|
|
53
|
+
RefreshMode: refreshMode,
|
|
54
|
+
};
|
|
55
|
+
const ops = new ListOperations(params.ContextUser, params.Provider);
|
|
56
|
+
const result = await ops.MaterializeFromView(viewId, opts);
|
|
57
|
+
addOutputParam(params, 'CreatedListID', result.CreatedListId);
|
|
58
|
+
addOutputParam(params, 'Added', result.Counts?.Added);
|
|
59
|
+
addOutputParam(params, 'Failed', result.Counts?.Failed);
|
|
60
|
+
return {
|
|
61
|
+
Success: result.Success,
|
|
62
|
+
ResultCode: result.ResultCode,
|
|
63
|
+
Message: result.Message,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
MaterializeListFromViewAction = __decorate([
|
|
68
|
+
RegisterClass(BaseAction, 'Materialize List From View')
|
|
69
|
+
], MaterializeListFromViewAction);
|
|
70
|
+
export { MaterializeListFromViewAction };
|
|
71
|
+
//# sourceMappingURL=materialize-list-from-view.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-list-from-view.action.js","sourceRoot":"","sources":["../../../src/custom/lists/materialize-list-from-view.action.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;GAmBG;AAEI,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,UAAU;IACjD,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QACvD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM;YAAE,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,UAAU,CAAwB,CAAC;QACjG,IAAI,WAAW,KAAK,UAAU,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,mBAAmB;gBAC/B,OAAO,EAAE,kDAAkD,WAAW,GAAG;aAC1E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAuB;YAC/B,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;YAChD,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC;YAClD,eAAe,EAAE,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC;YACjE,WAAW,EAAE,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC;YAC1D,WAAW,EAAE,WAAW;SACzB,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE3D,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAC9D,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACtD,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExD,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;CACF,CAAA;AAtCY,6BAA6B;IADzC,aAAa,CAAC,UAAU,EAAE,4BAA4B,CAAC;GAC3C,6BAA6B,CAsCzC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
2
|
+
import type { ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
|
|
3
|
+
/**
|
|
4
|
+
* Move a set of records from one list to another. Implemented as a
|
|
5
|
+
* thin wrapper over `ListOperations` semantics:
|
|
6
|
+
*
|
|
7
|
+
* 1. Insert the records into `TargetListID` (additive — silent skip
|
|
8
|
+
* on duplicates).
|
|
9
|
+
* 2. If `Mode = 'move'` (default), remove them from `SourceListID`.
|
|
10
|
+
* Removal goes through the same drop-guard contract; passing
|
|
11
|
+
* `ConfirmDrops: true` is required to actually delete.
|
|
12
|
+
*
|
|
13
|
+
* For `Mode = 'copy'`, step 2 is skipped — the records end up in both
|
|
14
|
+
* lists. The `RecordIDs` input is a JSON-stringified string array
|
|
15
|
+
* matching the canonical `MJ: List Detail.RecordID` format.
|
|
16
|
+
*/
|
|
17
|
+
export declare class MoveListMembersAction extends BaseAction {
|
|
18
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=move-list-members.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move-list-members.action.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/move-list-members.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAcxF;;;;;;;;;;;;;GAaG;AACH,qBACa,qBAAsB,SAAQ,UAAU;cACnC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA6HxF"}
|