strapi-plugin-bulk-updater 1.2.10 → 1.2.12

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.
@@ -1124,7 +1124,8 @@ const BulkUpdatePreviewModal = ({
1124
1124
  loading,
1125
1125
  previewData,
1126
1126
  attribute,
1127
- targetValueDisplay
1127
+ targetValueDisplay,
1128
+ publishOnApproval = true
1128
1129
  }) => {
1129
1130
  const [filterTab, setFilterTab] = React.useState("all");
1130
1131
  const [searchQuery, setSearchQuery] = React.useState("");
@@ -1197,9 +1198,17 @@ const BulkUpdatePreviewModal = ({
1197
1198
  ] }),
1198
1199
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: "Inspect exact before & after values across target records before applying changes to the database." })
1199
1200
  ] }),
1200
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, alignItems: "center", children: [
1201
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, alignItems: "center", wrap: "wrap", children: [
1201
1202
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: "New Value:" }),
1202
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { backgroundColor: "success100", textColor: "success700", children: targetValueDisplay || "(empty)" })
1203
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { backgroundColor: "success100", textColor: "success700", children: targetValueDisplay || "(empty)" }),
1204
+ /* @__PURE__ */ jsxRuntime.jsx(
1205
+ designSystem.Badge,
1206
+ {
1207
+ backgroundColor: publishOnApproval !== false ? "success100" : "warning100",
1208
+ textColor: publishOnApproval !== false ? "success700" : "warning700",
1209
+ children: publishOnApproval !== false ? "✓ LIVE PUBLISH" : "DRAFT ONLY"
1210
+ }
1211
+ )
1203
1212
  ] })
1204
1213
  ] })
1205
1214
  }
@@ -1638,6 +1647,9 @@ const BulkUpdater = () => {
1638
1647
  const [showPreviewModal, setShowPreviewModal] = React.useState(false);
1639
1648
  const [previewLoading, setPreviewLoading] = React.useState(false);
1640
1649
  const [previewData, setPreviewData] = React.useState(null);
1650
+ const [showPublishConfirmModal, setShowPublishConfirmModal] = React.useState(false);
1651
+ const [publishing, setPublishing] = React.useState(false);
1652
+ const [publishMakerNotesInput, setPublishMakerNotesInput] = React.useState("");
1641
1653
  const MODELS_CACHE_KEY = "strapi_bulk_updater_models_cache";
1642
1654
  const LAST_ATTR_KEY = "strapi_bulk_updater_last_attr";
1643
1655
  const getInitialAttribute = () => {
@@ -1790,10 +1802,13 @@ const BulkUpdater = () => {
1790
1802
  }
1791
1803
  }
1792
1804
  } catch (err) {
1793
- toggleNotification({
1794
- type: "danger",
1795
- message: err.message || "Failed to load collections data"
1796
- });
1805
+ const isAborted = err?.name === "AbortError" || err?.name === "CanceledError" || err?.code === "ERR_CANCELED" || err?.message?.includes("aborted") || err?.message?.includes("canceled");
1806
+ if (!isAborted) {
1807
+ toggleNotification({
1808
+ type: "danger",
1809
+ message: err?.message || "Failed to load collections data"
1810
+ });
1811
+ }
1797
1812
  } finally {
1798
1813
  setLoading(false);
1799
1814
  }
@@ -1834,13 +1849,17 @@ const BulkUpdater = () => {
1834
1849
  const res = await get(`/bulk-updater/collections/${colUid}/entries?${params.toString()}`);
1835
1850
  if (res.data && (res.data.success || res.data.entries !== void 0)) {
1836
1851
  const fetchedEntries = res.data.entries || [];
1852
+ const pageNum = res.data.pagination?.page ?? targetPage ?? 1;
1853
+ const pageSizeNum = res.data.pagination?.pageSize ?? size ?? defaultPageSize;
1854
+ const totalNum = res.data.pagination?.total !== void 0 ? res.data.pagination.total : fetchedEntries.length;
1855
+ const pageCountNum = res.data.pagination?.pageCount ?? Math.max(1, Math.ceil(totalNum / pageSizeNum));
1837
1856
  setCollectionPages((prev) => ({
1838
1857
  ...prev,
1839
1858
  [colUid]: {
1840
- page: res.data.pagination.page,
1841
- pageSize: res.data.pagination.pageSize,
1842
- total: res.data.pagination.total,
1843
- pageCount: res.data.pagination.pageCount,
1859
+ page: pageNum,
1860
+ pageSize: pageSizeNum,
1861
+ total: totalNum,
1862
+ pageCount: pageCountNum,
1844
1863
  entries: fetchedEntries,
1845
1864
  loading: false
1846
1865
  }
@@ -1857,10 +1876,13 @@ const BulkUpdater = () => {
1857
1876
  }
1858
1877
  }
1859
1878
  } catch (err) {
1860
- toggleNotification({
1861
- type: "danger",
1862
- message: `Failed to load entries for ${colUid}: ${err.message}`
1863
- });
1879
+ const isAborted = err?.name === "AbortError" || err?.name === "CanceledError" || err?.code === "ERR_CANCELED" || err?.message?.includes("aborted") || err?.message?.includes("canceled");
1880
+ if (!isAborted) {
1881
+ toggleNotification({
1882
+ type: "danger",
1883
+ message: `Failed to load entries for ${colUid}: ${err?.message || "Network error"}`
1884
+ });
1885
+ }
1864
1886
  setCollectionPages((prev) => ({
1865
1887
  ...prev,
1866
1888
  [colUid]: {
@@ -1884,10 +1906,13 @@ const BulkUpdater = () => {
1884
1906
  }
1885
1907
  }
1886
1908
  } catch (err) {
1887
- toggleNotification({
1888
- type: "danger",
1889
- message: err.message || "Failed to fetch audit history."
1890
- });
1909
+ const isAborted = err?.name === "AbortError" || err?.name === "CanceledError" || err?.code === "ERR_CANCELED" || err?.message?.includes("aborted") || err?.message?.includes("canceled");
1910
+ if (!isAborted) {
1911
+ toggleNotification({
1912
+ type: "danger",
1913
+ message: err?.message || "Failed to fetch audit history."
1914
+ });
1915
+ }
1891
1916
  } finally {
1892
1917
  setAuditLoading(false);
1893
1918
  }
@@ -2410,6 +2435,148 @@ const BulkUpdater = () => {
2410
2435
  setMakerNotesInput("");
2411
2436
  }
2412
2437
  };
2438
+ const handleOpenPublishModal = () => {
2439
+ const totalSelected = Object.values(selectedEntries).filter(Boolean).length;
2440
+ if (totalSelected === 0) {
2441
+ toggleNotification({
2442
+ type: "warning",
2443
+ message: "Please select at least one collection type or entry to publish"
2444
+ });
2445
+ return;
2446
+ }
2447
+ setShowPublishConfirmModal(true);
2448
+ };
2449
+ const executeBatchPublish = async (executionMode, forceImmediate = false) => {
2450
+ const targets = [];
2451
+ Object.keys(selectedEntries).forEach((key) => {
2452
+ if (selectedEntries[key]) {
2453
+ const parts = key.split(KEY_SEP);
2454
+ if (parts.length === 2) {
2455
+ targets.push({ uid: parts[0], documentId: parts[1] });
2456
+ }
2457
+ }
2458
+ });
2459
+ try {
2460
+ setPublishing(true);
2461
+ setShowPublishConfirmModal(false);
2462
+ setShowProcessingDashboard(true);
2463
+ setIsSubmittingBatch(true);
2464
+ setLastResults(null);
2465
+ const tempBatchId = `batch_pub_${Date.now()}`;
2466
+ setDashboardBatchId(tempBatchId);
2467
+ setDashboardJob({
2468
+ id: tempBatchId,
2469
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
2470
+ status: "processing",
2471
+ executionMode,
2472
+ attribute: "(publish)",
2473
+ value: "published",
2474
+ totalTargets: targets.length,
2475
+ processedCount: 0,
2476
+ updatedCount: 0,
2477
+ skippedCount: 0,
2478
+ failedCount: 0,
2479
+ isLive: true,
2480
+ publishOnApproval: true,
2481
+ results: []
2482
+ });
2483
+ const payload = {
2484
+ selectedEntries: targets,
2485
+ executionMode,
2486
+ makerNotes: publishMakerNotesInput,
2487
+ forceImmediate
2488
+ };
2489
+ const res = await post("/bulk-updater/batch-publish", payload);
2490
+ setIsSubmittingBatch(false);
2491
+ if (res.data && res.data.success) {
2492
+ setSelectedEntries({});
2493
+ const finalBatchId = res.data.batchId;
2494
+ setDashboardBatchId(finalBatchId);
2495
+ if (res.data.pending) {
2496
+ setDashboardJob({
2497
+ id: finalBatchId,
2498
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
2499
+ status: res.data.status || "pending_approval",
2500
+ executionMode,
2501
+ scheduledFor: res.data.scheduledFor,
2502
+ attribute: "(publish)",
2503
+ value: "published",
2504
+ totalTargets: targets.length,
2505
+ processedCount: 0,
2506
+ updatedCount: 0,
2507
+ skippedCount: 0,
2508
+ failedCount: 0,
2509
+ isLive: true,
2510
+ publishOnApproval: true,
2511
+ makerNotes: publishMakerNotesInput,
2512
+ policyMessage: res.data.message,
2513
+ results: []
2514
+ });
2515
+ toggleNotification({
2516
+ type: "success",
2517
+ message: res.data.message || "Publish batch submitted successfully."
2518
+ });
2519
+ await fetchPendingBatches();
2520
+ } else {
2521
+ setLastResults(res.data.results || []);
2522
+ setUpdateSummary({
2523
+ updatedCount: res.data.publishedCount || 0,
2524
+ skippedCount: res.data.skippedCount || 0,
2525
+ batchId: res.data.batchId
2526
+ });
2527
+ setDashboardJob({
2528
+ id: finalBatchId,
2529
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
2530
+ completedAt: (/* @__PURE__ */ new Date()).toISOString(),
2531
+ status: res.data.status || "successful",
2532
+ executionMode: "immediate",
2533
+ attribute: "(publish)",
2534
+ value: "published",
2535
+ totalTargets: res.data.totalTargets || targets.length,
2536
+ processedCount: res.data.results?.length || targets.length,
2537
+ updatedCount: res.data.publishedCount || 0,
2538
+ skippedCount: res.data.skippedCount || 0,
2539
+ failedCount: res.data.failedCount || 0,
2540
+ isLive: true,
2541
+ publishOnApproval: true,
2542
+ results: res.data.results || []
2543
+ });
2544
+ toggleNotification({
2545
+ type: "success",
2546
+ message: `Bulk publish complete! Batch ID: ${res.data.batchId}. Published: ${res.data.publishedCount}, Skipped: ${res.data.skippedCount}`
2547
+ });
2548
+ await fetchModels();
2549
+ await fetchAuditHistory();
2550
+ }
2551
+ } else {
2552
+ setIsSubmittingBatch(false);
2553
+ setDashboardJob((prev) => ({
2554
+ ...prev,
2555
+ status: "failed",
2556
+ error: res.data?.error || "Batch publish encountered an error"
2557
+ }));
2558
+ toggleNotification({
2559
+ type: "danger",
2560
+ message: res.data?.error || "Batch publish encountered an error"
2561
+ });
2562
+ }
2563
+ } catch (err) {
2564
+ setIsSubmittingBatch(false);
2565
+ const errMsg = err.response?.data?.error || err.message || "Batch publish failed";
2566
+ setDashboardJob((prev) => ({
2567
+ ...prev,
2568
+ status: "failed",
2569
+ error: errMsg
2570
+ }));
2571
+ toggleNotification({
2572
+ type: "danger",
2573
+ message: errMsg
2574
+ });
2575
+ } finally {
2576
+ setPublishing(false);
2577
+ setPublishMakerNotesInput("");
2578
+ }
2579
+ };
2413
2580
  const handleApproveBatch = async (batchId) => {
2414
2581
  try {
2415
2582
  setApprovingBatchId(batchId);
@@ -2894,9 +3061,47 @@ const BulkUpdater = () => {
2894
3061
  ")"
2895
3062
  ]
2896
3063
  }
3064
+ ),
3065
+ /* @__PURE__ */ jsxRuntime.jsxs(
3066
+ designSystem.Button,
3067
+ {
3068
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Check, {}),
3069
+ variant: "success-light",
3070
+ size: "L",
3071
+ onClick: handleOpenPublishModal,
3072
+ loading: publishing,
3073
+ disabled: loading || totalSelectedCount === 0,
3074
+ title: "Directly publish selected draft records across collections",
3075
+ children: [
3076
+ "Publish Selected (",
3077
+ totalSelectedCount,
3078
+ ")"
3079
+ ]
3080
+ }
2897
3081
  )
2898
3082
  ] })
2899
3083
  ] }),
3084
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 4, padding: 4, background: "neutral100", hasRadius: true, style: { border: "1px solid #eaeaef" }, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", alignItems: "center", wrap: "wrap", gap: 3, children: [
3085
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, alignItems: "center", children: [
3086
+ /* @__PURE__ */ jsxRuntime.jsx(
3087
+ designSystem.Checkbox,
3088
+ {
3089
+ checked: publishOnApproval,
3090
+ onCheckedChange: (checked) => setPublishOnApproval(Boolean(checked)),
3091
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "bold", children: "Auto-Publish after Update" })
3092
+ }
3093
+ ),
3094
+ /* @__PURE__ */ jsxRuntime.jsx(
3095
+ designSystem.Badge,
3096
+ {
3097
+ backgroundColor: publishOnApproval ? "success100" : "warning100",
3098
+ textColor: publishOnApproval ? "success700" : "warning700",
3099
+ children: publishOnApproval ? "✓ LIVE PUBLISH" : "DRAFT ONLY"
3100
+ }
3101
+ )
3102
+ ] }),
3103
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: publishOnApproval ? "When enabled, entries will be published live immediately upon batch execution for draft-enabled content types." : "When disabled, entries will be saved as draft versions without publishing to live visitors." })
3104
+ ] }) }),
2900
3105
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 4, padding: 4, background: "neutral100", hasRadius: true, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", alignItems: "center", wrap: "wrap", gap: 3, children: [
2901
3106
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { gap: 2, alignItems: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
2902
3107
  designSystem.Checkbox,
@@ -4224,6 +4429,210 @@ const BulkUpdater = () => {
4224
4429
  )
4225
4430
  }
4226
4431
  ),
4432
+ showPublishConfirmModal && /* @__PURE__ */ jsxRuntime.jsx(
4433
+ "div",
4434
+ {
4435
+ style: {
4436
+ position: "fixed",
4437
+ top: 0,
4438
+ left: 0,
4439
+ right: 0,
4440
+ bottom: 0,
4441
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
4442
+ display: "flex",
4443
+ alignItems: "center",
4444
+ justifyContent: "center",
4445
+ zIndex: 100
4446
+ },
4447
+ onClick: () => setShowPublishConfirmModal(false),
4448
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
4449
+ designSystem.Box,
4450
+ {
4451
+ background: "neutral0",
4452
+ hasRadius: true,
4453
+ style: {
4454
+ width: "90%",
4455
+ maxWidth: 620,
4456
+ maxHeight: "90vh",
4457
+ display: "flex",
4458
+ flexDirection: "column",
4459
+ boxShadow: "0 10px 40px rgba(0, 0, 0, 0.25)",
4460
+ overflow: "hidden"
4461
+ },
4462
+ onClick: (e) => e.stopPropagation(),
4463
+ children: [
4464
+ /* @__PURE__ */ jsxRuntime.jsx(
4465
+ designSystem.Box,
4466
+ {
4467
+ padding: 5,
4468
+ background: "neutral100",
4469
+ style: {
4470
+ borderBottom: "1px solid rgba(120, 120, 150, 0.2)",
4471
+ flexShrink: 0
4472
+ },
4473
+ children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", alignItems: "center", children: [
4474
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
4475
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "beta", fontWeight: "bold", children: "Confirm Bulk Publish" }),
4476
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 1, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: "Publish selected draft records live to visitors across content types" }) })
4477
+ ] }),
4478
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Badge, { backgroundColor: "success100", textColor: "success700", children: [
4479
+ totalSelectedCount,
4480
+ " Selected"
4481
+ ] })
4482
+ ] })
4483
+ }
4484
+ ),
4485
+ /* @__PURE__ */ jsxRuntime.jsxs(
4486
+ designSystem.Box,
4487
+ {
4488
+ padding: 5,
4489
+ style: {
4490
+ overflowY: "auto",
4491
+ flexGrow: 1,
4492
+ display: "flex",
4493
+ flexDirection: "column",
4494
+ gap: 16
4495
+ },
4496
+ children: [
4497
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { padding: 4, background: "neutral100", hasRadius: true, style: { border: "1px solid #eaeaef" }, children: [
4498
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "bold", children: "Collection Breakdown:" }),
4499
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 2, children: collections.filter(
4500
+ (col) => col.entries.some((entry) => selectedEntries[`${col.uid}${KEY_SEP}${entry.documentId}`])
4501
+ ).map((col) => {
4502
+ const count = col.entries.filter(
4503
+ (entry) => selectedEntries[`${col.uid}${KEY_SEP}${entry.documentId}`]
4504
+ ).length;
4505
+ const hasDraftAndPublish = col.draftAndPublish !== false;
4506
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4507
+ designSystem.Flex,
4508
+ {
4509
+ justifyContent: "space-between",
4510
+ alignItems: "center",
4511
+ paddingTop: 2,
4512
+ paddingBottom: 2,
4513
+ style: { borderBottom: "1px dashed #eaeaef" },
4514
+ children: [
4515
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", children: [
4516
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: col.displayName }),
4517
+ " (",
4518
+ col.uid,
4519
+ ")"
4520
+ ] }),
4521
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, alignItems: "center", children: [
4522
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Badge, { backgroundColor: "neutral150", textColor: "neutral700", children: [
4523
+ count,
4524
+ " ",
4525
+ count === 1 ? "entry" : "entries"
4526
+ ] }),
4527
+ hasDraftAndPublish ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { backgroundColor: "success100", textColor: "success700", children: "✓ Draft & Publish Enabled" }) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Badge, { backgroundColor: "warning100", textColor: "warning700", children: "⚠️ Skipped (Drafts Disabled)" })
4528
+ ] })
4529
+ ]
4530
+ },
4531
+ col.uid
4532
+ );
4533
+ }) })
4534
+ ] }),
4535
+ executionWindow?.isBusinessHours && /* @__PURE__ */ jsxRuntime.jsxs(
4536
+ designSystem.Box,
4537
+ {
4538
+ padding: 4,
4539
+ background: "warning100",
4540
+ hasRadius: true,
4541
+ style: { border: "1px solid #f5c0b8" },
4542
+ children: [
4543
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", fontWeight: "bold", textColor: "warning700", children: "⚠️ Business Hours Active:" }),
4544
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", textColor: "warning700", style: { display: "block", marginTop: 4 }, children: [
4545
+ "It is currently business peak hours (",
4546
+ executionWindow.currentTime,
4547
+ "). To prevent API latency spikes, publish requests should be queued for off-peak hours (",
4548
+ executionWindow.offPeakStartTime,
4549
+ ") or submitted for governance review."
4550
+ ] })
4551
+ ]
4552
+ }
4553
+ ),
4554
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
4555
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", fontWeight: "bold", children: "Governance Notes / Reason (Optional):" }),
4556
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 1, children: /* @__PURE__ */ jsxRuntime.jsx(
4557
+ designSystem.TextInput,
4558
+ {
4559
+ name: "publishMakerNotes",
4560
+ placeholder: "e.g. Publishing Q3 catalog release updates",
4561
+ value: publishMakerNotesInput,
4562
+ onChange: (e) => setPublishMakerNotesInput(e.target.value)
4563
+ }
4564
+ ) })
4565
+ ] })
4566
+ ]
4567
+ }
4568
+ ),
4569
+ /* @__PURE__ */ jsxRuntime.jsx(
4570
+ designSystem.Box,
4571
+ {
4572
+ padding: 4,
4573
+ background: "neutral100",
4574
+ style: {
4575
+ borderTop: "1px solid rgba(120, 120, 150, 0.2)",
4576
+ flexShrink: 0,
4577
+ boxShadow: "0 -4px 16px rgba(0, 0, 0, 0.08)"
4578
+ },
4579
+ children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { justifyContent: "space-between", alignItems: "center", gap: 3, style: { width: "100%" }, children: [
4580
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", size: "M", onClick: () => setShowPublishConfirmModal(false), children: "Cancel" }),
4581
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, wrap: "wrap", justifyContent: "flex-end", alignItems: "center", children: [
4582
+ /* @__PURE__ */ jsxRuntime.jsx(
4583
+ designSystem.Button,
4584
+ {
4585
+ variant: executionWindow?.isBusinessHours ? "default" : "secondary",
4586
+ size: "M",
4587
+ onClick: () => executeBatchPublish("maker_checker"),
4588
+ loading: publishing,
4589
+ children: "Submit for Checker Approval"
4590
+ }
4591
+ ),
4592
+ executionWindow?.isBusinessHours ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4593
+ /* @__PURE__ */ jsxRuntime.jsxs(
4594
+ designSystem.Button,
4595
+ {
4596
+ variant: "secondary",
4597
+ size: "M",
4598
+ onClick: () => executeBatchPublish("queue_offpeak"),
4599
+ loading: publishing,
4600
+ children: [
4601
+ "Queue for Off-Peak (",
4602
+ executionWindow?.offPeakStartTime || "18:00",
4603
+ ")"
4604
+ ]
4605
+ }
4606
+ ),
4607
+ /* @__PURE__ */ jsxRuntime.jsx(
4608
+ designSystem.Button,
4609
+ {
4610
+ variant: "danger-light",
4611
+ size: "S",
4612
+ onClick: () => executeBatchPublish("immediate", true),
4613
+ loading: publishing,
4614
+ children: "Force Publish Now"
4615
+ }
4616
+ )
4617
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(
4618
+ designSystem.Button,
4619
+ {
4620
+ variant: "default",
4621
+ size: "M",
4622
+ onClick: () => executeBatchPublish("immediate"),
4623
+ loading: publishing,
4624
+ children: "Confirm & Publish Now"
4625
+ }
4626
+ )
4627
+ ] })
4628
+ ] })
4629
+ }
4630
+ )
4631
+ ]
4632
+ }
4633
+ )
4634
+ }
4635
+ ),
4227
4636
  /* @__PURE__ */ jsxRuntime.jsx(
4228
4637
  BulkUpdatePreviewModal,
4229
4638
  {
@@ -4236,6 +4645,7 @@ const BulkUpdater = () => {
4236
4645
  loading: previewLoading,
4237
4646
  previewData,
4238
4647
  attribute: selectedAttribute,
4648
+ publishOnApproval,
4239
4649
  targetValueDisplay: relationsMeta[selectedAttribute] ? selectedRelationDocId === "__clear__" ? "Clear / Unlink Relation" : relationOptions.find((o) => o.documentId === selectedRelationDocId)?.label || selectedRelationDocId || "(none)" : useRegex ? `Replace /${regexPattern}/g with "${attributeValue}"` : attributeValue
4240
4650
  }
4241
4651
  ),
@@ -4257,4 +4667,4 @@ exports.default = BulkUpdater;
4257
4667
  exports.formatDisplayValue = formatDisplayValue;
4258
4668
  exports.getAvailableColumnsForCollection = getAvailableColumnsForCollection;
4259
4669
  exports.getNestedValue = getNestedValue;
4260
- //# sourceMappingURL=BulkUpdater-EI4sKaLN.js.map
4670
+ //# sourceMappingURL=BulkUpdater-CQ9zGdat.js.map