strapi-plugin-bulk-updater 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkUpdater-CooMo-Hc.js","sources":["../../admin/src/pages/BulkUpdater.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useFetchClient, useNotification } from '@strapi/strapi/admin';\nimport {\n Box,\n Flex,\n Typography,\n Button,\n TextInput,\n SingleSelect,\n SingleSelectOption,\n Checkbox,\n Badge,\n Alert,\n Table,\n Thead,\n Tbody,\n Tr,\n Th,\n Td,\n} from '@strapi/design-system';\nimport { Play, ArrowClockwise, Check } from '@strapi/icons';\n\ninterface Entry {\n id: number | string;\n documentId: string;\n [key: string]: any;\n}\n\nexport interface RelationMeta {\n isRelation: boolean;\n relationType: string;\n targetUid: string;\n targetDisplayName: string;\n isMulti: boolean;\n}\n\ninterface CollectionModel {\n uid: string;\n kind?: string;\n isSingleType?: boolean;\n singularName: string;\n pluralName: string;\n displayName: string;\n attributes: string[];\n relations?: Record<string, RelationMeta>;\n totalEntries?: number;\n entries: Entry[];\n}\n\ninterface CollectionPageState {\n page: number;\n pageSize: number;\n total: number;\n pageCount: number;\n entries: Entry[];\n loading: boolean;\n}\n\ninterface LicenseStatus {\n isPro: boolean;\n tier: 'free' | 'pro' | 'enterprise';\n features: string[];\n}\n\ninterface UpdateResult {\n uid: string;\n collectionName: string;\n documentId: string;\n label: string;\n attribute: string;\n oldValue?: any;\n newValue?: any;\n status: 'updated' | 'skipped' | 'error';\n message: string;\n}\n\ninterface AuditRecord {\n id: number | string;\n documentId: string;\n batchId: string;\n attribute: string;\n value: string;\n userEmail: string;\n userName: string;\n updatedCount: number;\n skippedCount: number;\n totalTargets: number;\n diffs: UpdateResult[];\n isRolledBack: boolean;\n rolledBackAt: string | null;\n rolledBackBy: string | null;\n executedAt: string;\n}\n\ninterface ExecutionWindowInfo {\n enabled: boolean;\n timeZone: string;\n businessHours: {\n start: string;\n end: string;\n };\n offPeakStartTime: string;\n autoQueueDuringBusinessHours: boolean;\n isBusinessHours: boolean;\n currentServerTime: string;\n policyMessage: string;\n}\n\ninterface PendingBatch {\n id: string;\n createdAt: string;\n createdBy: { id?: string | number; email?: string; firstname?: string; lastname?: string; username?: string };\n payload: {\n attribute: string;\n value: string;\n selectedEntries?: Array<{ uid: string; documentId: string }>;\n selectedCollections?: string[];\n isRegex?: boolean;\n regexPattern?: string;\n publishOnApproval?: boolean;\n };\n summary: {\n attribute: string;\n value: string;\n totalTargets: number;\n collectionBreakdown: Record<string, number>;\n publishOnApproval?: boolean;\n };\n status: 'pending_approval' | 'queued_offpeak' | 'approved' | 'rejected' | 'executed';\n executionMode: 'maker_checker' | 'queue_offpeak' | 'immediate';\n scheduledFor?: string;\n makerNotes?: string;\n approval?: {\n checkerUser?: { id?: string | number; email?: string; firstname?: string; lastname?: string; username?: string };\n decisionDate?: string;\n rejectionReason?: string;\n };\n executionResult?: any;\n}\n\nexport interface ColumnDef {\n key: string;\n label: string;\n sortable?: boolean;\n isPermanent?: boolean;\n defaultVisible: boolean;\n}\n\n/**\n * Flat helper: Generates the list of available columns for a given collection model.\n * Zero deep nesting: returns a flat array of ColumnDef.\n */\nexport function getAvailableColumnsForCollection(\n col: CollectionModel,\n selectedAttribute: string\n): ColumnDef[] {\n const cols: ColumnDef[] = [\n {\n key: 'select',\n label: 'Select',\n isPermanent: true,\n defaultVisible: true,\n },\n {\n key: 'identifier',\n label: 'Identifier',\n sortable: !col.isSingleType,\n defaultVisible: true,\n },\n ];\n\n // Schema-specific attributes\n const candidateAttrs = col.attributes || [];\n candidateAttrs.forEach((attr) => {\n if (attr === 'name' || attr === 'title' || attr === selectedAttribute) {\n return;\n }\n const formattedLabel = attr.charAt(0).toUpperCase() + attr.slice(1);\n cols.push({\n key: `attr_${attr}`,\n label: formattedLabel,\n sortable: !col.isSingleType,\n defaultVisible: ['department', 'email', 'location'].includes(attr),\n });\n });\n\n // Target attribute column\n cols.push({\n key: 'target_attr',\n label: `Current \"${selectedAttribute}\"`,\n sortable: !col.isSingleType && col.attributes.includes(selectedAttribute),\n defaultVisible: true,\n });\n\n // Status column\n cols.push({\n key: 'status',\n label: 'Status',\n sortable: false,\n defaultVisible: true,\n });\n\n return cols;\n}\n\n/**\n * Flat helper: Renders table header cell without nested JSX.\n */\nfunction renderHeaderCell(\n colDef: ColumnDef,\n col: CollectionModel,\n currentSort: { field: string; order: 'asc' | 'desc' },\n selectedAttribute: string,\n onSort: (colUid: string, field: string) => void\n) {\n if (colDef.key === 'select') {\n return (\n <Th key=\"select\" style={{ width: 48 }}>\n <Typography variant=\"sigma\">Select</Typography>\n </Th>\n );\n }\n\n const isCurrentSorted =\n (colDef.key === 'identifier' && (currentSort.field === 'name' || currentSort.field === 'title')) ||\n (colDef.key === 'target_attr' && currentSort.field === selectedAttribute) ||\n (colDef.key.startsWith('attr_') && currentSort.field === colDef.key.replace('attr_', ''));\n\n const sortArrow = isCurrentSorted ? (currentSort.order === 'asc' ? '▲' : '▼') : '⇅';\n\n const handleClick = () => {\n if (!colDef.sortable) return;\n if (colDef.key === 'identifier') {\n const field = col.attributes.includes('name') ? 'name' : col.attributes.includes('title') ? 'title' : 'createdAt';\n onSort(col.uid, field);\n } else if (colDef.key === 'target_attr') {\n onSort(col.uid, selectedAttribute);\n } else if (colDef.key.startsWith('attr_')) {\n onSort(col.uid, colDef.key.replace('attr_', ''));\n }\n };\n\n return (\n <Th\n key={colDef.key}\n style={{ cursor: colDef.sortable ? 'pointer' : 'default', userSelect: 'none' }}\n onClick={handleClick}\n >\n <Flex gap={1} alignItems=\"center\">\n <Typography variant=\"sigma\">{colDef.label}</Typography>\n {colDef.sortable && (\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {sortArrow}\n </Typography>\n )}\n </Flex>\n </Th>\n );\n}\n\n/**\n * Flat helper: Formats attribute values, gracefully handling relation objects and arrays.\n */\nexport function formatDisplayValue(val: any): string {\n if (val === undefined || val === null || val === '') {\n return '(empty / not set)';\n }\n if (Array.isArray(val)) {\n if (val.length === 0) return '(empty / unlinked)';\n return val\n .map((item) =>\n typeof item === 'object' && item !== null\n ? item.name || item.title || item.email || item.username || item.documentId || item.id\n : String(item)\n )\n .join(', ');\n }\n if (typeof val === 'object' && val !== null) {\n if (val.isRelation && val.display) return val.display;\n return val.name || val.title || val.email || val.username || val.documentId || val.id || JSON.stringify(val);\n }\n return String(val);\n}\n\n/**\n * Flat helper: Renders a single cell content using clean early returns.\n * Zero deep nesting.\n */\nfunction renderCellContent(\n colDef: ColumnDef,\n entry: Entry,\n col: CollectionModel,\n selectedAttribute: string,\n isMatch: boolean,\n hasAttr: boolean,\n isSelected: boolean,\n onToggleSelect: () => void\n): React.ReactNode {\n switch (colDef.key) {\n case 'select':\n return (\n <Checkbox\n checked={isSelected}\n onCheckedChange={onToggleSelect}\n />\n );\n\n case 'identifier': {\n const mainText = entry.name || entry.title || `Entry #${entry.id || entry.documentId}`;\n return (\n <Box>\n <Typography fontWeight=\"semiBold\">{mainText}</Typography>\n {entry.email && (\n <Typography variant=\"pi\" textColor=\"neutral500\" display=\"block\">\n {entry.email}\n </Typography>\n )}\n </Box>\n );\n }\n\n case 'target_attr': {\n const val = entry[selectedAttribute];\n const displayStr = formatDisplayValue(val);\n const isUnset = displayStr === '(empty / not set)' || displayStr === '(empty / unlinked)';\n return (\n <Typography\n textColor={isUnset ? 'neutral500' : 'neutral800'}\n style={{\n fontStyle: isUnset ? 'italic' : 'normal',\n display: 'inline-block',\n maxWidth: 260,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {displayStr}\n </Typography>\n );\n }\n\n case 'status': {\n if (!hasAttr) {\n return (\n <Badge backgroundColor=\"neutral200\" textColor=\"neutral600\">\n Ignored\n </Badge>\n );\n }\n return (\n <Flex gap={1} alignItems=\"center\">\n <Badge backgroundColor=\"success100\" textColor=\"success700\">\n Supported\n </Badge>\n {isMatch && (\n <Badge backgroundColor=\"secondary100\" textColor=\"secondary700\">\n Matches Filter\n </Badge>\n )}\n </Flex>\n );\n }\n\n default: {\n const attrName = colDef.key.replace('attr_', '');\n const rawVal = entry[attrName];\n const displayStr = formatDisplayValue(rawVal);\n return (\n <Typography\n textColor=\"neutral700\"\n style={{ maxWidth: 200, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}\n >\n {displayStr === '(empty / not set)' ? '-' : displayStr}\n </Typography>\n );\n }\n }\n}\n\nconst BulkUpdater: React.FC = () => {\n const { get, post } = useFetchClient();\n const { toggleNotification } = useNotification();\n\n // Active view tab: 'editor' | 'audit' (synced with ?tab= query param)\n const getInitialTab = (): 'editor' | 'audit' => {\n try {\n const params = new URLSearchParams(window.location.search);\n const t = params.get('tab');\n if (t === 'audit' || t === 'editor') return t;\n } catch {}\n return 'editor';\n };\n\n const [activeTab, setActiveTabState] = useState<'editor' | 'audit'>(getInitialTab);\n\n const setActiveTab = (tab: 'editor' | 'audit') => {\n setActiveTabState(tab);\n try {\n const url = new URL(window.location.href);\n url.searchParams.set('tab', tab);\n window.history.replaceState({}, '', url.toString());\n } catch {}\n };\n\n const [loading, setLoading] = useState<boolean>(true);\n const [updating, setUpdating] = useState<boolean>(false);\n const [attributes, setAttributes] = useState<string[]>([]);\n const [collections, setCollections] = useState<CollectionModel[]>([]);\n const [license, setLicense] = useState<LicenseStatus | null>(null);\n const [auditEnabled, setAuditEnabled] = useState<boolean>(false);\n\n // Execution Window & Maker-Checker State\n const [executionWindow, setExecutionWindow] = useState<ExecutionWindowInfo | null>(null);\n const [showConfirmModal, setShowConfirmModal] = useState<boolean>(false);\n const [pendingBatches, setPendingBatches] = useState<PendingBatch[]>([]);\n const [pendingBatchesLoading, setPendingBatchesLoading] = useState<boolean>(false);\n const [approvingBatchId, setApprovingBatchId] = useState<string | null>(null);\n const [rejectingBatchId, setRejectingBatchId] = useState<string | null>(null);\n const [executingNowBatchId, setExecutingNowBatchId] = useState<string | null>(null);\n const [makerNotesInput, setMakerNotesInput] = useState<string>('');\n const [publishOnApproval, setPublishOnApproval] = useState<boolean>(true);\n\n // Selected state\n const [selectedAttribute, setSelectedAttribute] = useState<string>('metaDescription');\n const [attributeValue, setAttributeValue] = useState<string>('');\n const [selectedEntries, setSelectedEntries] = useState<Record<string, boolean>>({});\n\n // Relation State\n const [relationsMeta, setRelationsMeta] = useState<Record<string, RelationMeta>>({});\n const [relationOptions, setRelationOptions] = useState<Array<{ documentId: string; label: string }>>([]);\n const [relationOptionsLoading, setRelationOptionsLoading] = useState<boolean>(false);\n const [selectedRelationDocId, setSelectedRelationDocId] = useState<string>('');\n const [relationMode, setRelationMode] = useState<'set' | 'connect' | 'disconnect' | 'clear'>('set');\n\n const fetchRelationOptions = async (targetUid: string) => {\n try {\n setRelationOptionsLoading(true);\n const res = await get(`/bulk-updater/relation-options?targetUid=${encodeURIComponent(targetUid)}`);\n if (res.data && res.data.success) {\n setRelationOptions(res.data.options || []);\n }\n } catch {\n setRelationOptions([]);\n } finally {\n setRelationOptionsLoading(false);\n }\n };\n\n // Pro feature: Regex\n const [useRegex, setUseRegex] = useState<boolean>(false);\n const [regexPattern, setRegexPattern] = useState<string>('');\n\n // Target Value Filter state (\"Find items with a certain value first\")\n type FilterOperator = 'none' | 'empty' | 'not_empty' | 'equals' | 'contains' | 'starts_with';\n const [filterOperator, setFilterOperator] = useState<FilterOperator>('none');\n const [filterQuery, setFilterQuery] = useState<string>('');\n const [hideNonMatching, setHideNonMatching] = useState<boolean>(false);\n\n // Result state\n const [lastResults, setLastResults] = useState<UpdateResult[] | null>(null);\n const [updateSummary, setUpdateSummary] = useState<{\n updatedCount: number;\n skippedCount: number;\n batchId?: string;\n } | null>(null);\n\n const [collectionPages, setCollectionPages] = useState<Record<string, CollectionPageState>>({});\n const [collectionSearch, setCollectionSearch] = useState<string>('');\n\n // Content Type visibility filter\n const [visibleTypeUids, setVisibleTypeUids] = useState<Record<string, boolean>>({});\n\n // Pagination & Sorting state (capped at 100)\n const [defaultPageSize, setDefaultPageSize] = useState<number>(10);\n const [collectionSorts, setCollectionSorts] = useState<Record<string, { field: string; order: 'asc' | 'desc' }>>({});\n\n // Column Visibility per Collection Type (flat mapping: uid -> string[])\n const [collectionColumnVisibility, setCollectionColumnVisibility] = useState<Record<string, string[]>>({});\n const [openColumnPickerUid, setOpenColumnPickerUid] = useState<string | null>(null);\n\n const toggleColumn = (colUid: string, colKey: string, availableCols: ColumnDef[]) => {\n setCollectionColumnVisibility((prev) => {\n const current = prev[colUid] || availableCols.filter((c) => c.defaultVisible).map((c) => c.key);\n let next: string[];\n if (current.includes(colKey)) {\n const remaining = current.filter((k) => k !== colKey);\n if (remaining.filter((k) => k !== 'select').length === 0) {\n return prev;\n }\n next = remaining;\n } else {\n next = [...current, colKey];\n }\n return { ...prev, [colUid]: next };\n });\n };\n\n const showAllColumns = (colUid: string, availableCols: ColumnDef[]) => {\n setCollectionColumnVisibility((prev) => ({\n ...prev,\n [colUid]: availableCols.map((c) => c.key),\n }));\n };\n\n const resetDefaultColumns = (colUid: string, availableCols: ColumnDef[]) => {\n setCollectionColumnVisibility((prev) => ({\n ...prev,\n [colUid]: availableCols.filter((c) => c.defaultVisible).map((c) => c.key),\n }));\n };\n\n // Audit state\n const [auditHistory, setAuditHistory] = useState<AuditRecord[]>([]);\n const [auditLoading, setAuditLoading] = useState<boolean>(false);\n const [rollingBackBatchId, setRollingBackBatchId] = useState<string | null>(null);\n const [expandedDiffBatchId, setExpandedDiffBatchId] = useState<string | null>(null);\n const [auditNotice, setAuditNotice] = useState<string | null>(null);\n\n const latestActiveBatch = auditHistory.find((rec) => !rec.isRolledBack);\n\n const fetchModels = async () => {\n try {\n setLoading(true);\n const res = await get('/bulk-updater/models');\n if (res.data && res.data.success) {\n setAttributes(res.data.attributes || []);\n const cols: CollectionModel[] = res.data.collections || [];\n setCollections(cols);\n setLicense(res.data.license || null);\n setAuditEnabled(Boolean(res.data.auditEnabled));\n if (res.data.executionWindow) {\n setExecutionWindow(res.data.executionWindow);\n }\n\n const pages: Record<string, CollectionPageState> = {};\n const initialVisibility: Record<string, boolean> = {};\n const initialSorts: Record<string, { field: string; order: 'asc' | 'desc' }> = {};\n cols.forEach((col: CollectionModel) => {\n const total = col.totalEntries !== undefined ? col.totalEntries : (col.entries ? col.entries.length : 0);\n const initialPageSize = col.isSingleType ? 1 : 10;\n pages[col.uid] = {\n page: 1,\n pageSize: initialPageSize,\n total,\n pageCount: col.isSingleType ? 1 : (Math.ceil(total / initialPageSize) || 1),\n entries: (col.entries || []).slice(0, initialPageSize),\n loading: false,\n };\n initialVisibility[col.uid] = true;\n initialSorts[col.uid] = { field: 'createdAt', order: 'desc' };\n });\n setCollectionPages(pages);\n setVisibleTypeUids(initialVisibility);\n setCollectionSorts(initialSorts);\n\n if (res.data.relationsMeta) {\n setRelationsMeta(res.data.relationsMeta);\n }\n\n const activeAttr = selectedAttribute || (res.data.attributes && res.data.attributes[0]);\n if (!selectedAttribute && activeAttr) {\n setSelectedAttribute(activeAttr);\n }\n if (activeAttr && res.data.relationsMeta && res.data.relationsMeta[activeAttr]) {\n fetchRelationOptions(res.data.relationsMeta[activeAttr].targetUid);\n }\n }\n } catch (err: any) {\n toggleNotification({\n type: 'danger',\n message: err.message || 'Failed to load collections data',\n });\n } finally {\n setLoading(false);\n }\n };\n\n const loadCollectionPage = async (\n colUid: string,\n targetPage: number,\n customPageSize?: number,\n customSortField?: string,\n customSortOrder?: 'asc' | 'desc'\n ) => {\n const currentPageState = collectionPages[colUid];\n const size = customPageSize || currentPageState?.pageSize || defaultPageSize;\n const currentSort = collectionSorts[colUid] || { field: 'createdAt', order: 'desc' };\n const sortField = customSortField !== undefined ? customSortField : currentSort.field;\n const sortOrder = customSortOrder !== undefined ? customSortOrder : currentSort.order;\n\n setCollectionPages((prev) => ({\n ...prev,\n [colUid]: {\n ...(prev[colUid] || { page: 1, pageSize: size, total: 0, pageCount: 1, entries: [] }),\n loading: true,\n },\n }));\n\n try {\n const params = new URLSearchParams({\n page: String(targetPage),\n pageSize: String(size),\n });\n if (selectedAttribute) params.set('attribute', selectedAttribute);\n if (filterOperator && filterOperator !== 'none') {\n params.set('filterOperator', filterOperator);\n if (filterQuery) params.set('filterQuery', filterQuery);\n }\n if (sortField) {\n params.set('sortField', sortField);\n params.set('sortOrder', sortOrder);\n }\n\n const res = await get(`/bulk-updater/collections/${colUid}/entries?${params.toString()}`);\n if (res.data && res.data.success) {\n setCollectionPages((prev) => ({\n ...prev,\n [colUid]: {\n page: res.data.pagination.page,\n pageSize: res.data.pagination.pageSize,\n total: res.data.pagination.total,\n pageCount: res.data.pagination.pageCount,\n entries: res.data.entries || [],\n loading: false,\n },\n }));\n }\n } catch (err: any) {\n toggleNotification({\n type: 'danger',\n message: `Failed to load entries for ${colUid}: ${err.message}`,\n });\n setCollectionPages((prev) => ({\n ...prev,\n [colUid]: {\n ...(prev[colUid] || {}),\n loading: false,\n },\n }));\n }\n };\n\n const fetchAuditHistory = async () => {\n try {\n setAuditLoading(true);\n const res = await get('/bulk-updater/audit/history');\n if (res.data) {\n if (res.data.enabled) {\n setAuditHistory(res.data.history || []);\n setAuditNotice(null);\n } else {\n setAuditHistory([]);\n setAuditNotice(res.data.message || 'Audit trail is not configured.');\n }\n }\n } catch (err: any) {\n toggleNotification({\n type: 'danger',\n message: err.message || 'Failed to fetch audit history.',\n });\n } finally {\n setAuditLoading(false);\n }\n };\n\n const fetchPendingBatches = async () => {\n try {\n setPendingBatchesLoading(true);\n const res = await get('/bulk-updater/pending-batches');\n if (res.data && res.data.success) {\n setPendingBatches(res.data.batches || []);\n if (res.data.executionWindow) {\n setExecutionWindow(res.data.executionWindow);\n }\n }\n } catch {\n // ignore\n } finally {\n setPendingBatchesLoading(false);\n }\n };\n\n useEffect(() => {\n fetchModels();\n fetchAuditHistory();\n fetchPendingBatches();\n }, []);\n\n useEffect(() => {\n if (activeTab === 'audit') {\n fetchAuditHistory();\n fetchPendingBatches();\n }\n }, [activeTab]);\n\n const KEY_SEP = '@@@';\n\n // Handle attribute selection change: unchecks all existing selections if attribute changes\n const handleAttributeChange = (newAttr: string) => {\n if (newAttr !== selectedAttribute) {\n setSelectedAttribute(newAttr);\n setSelectedEntries({});\n setFilterOperator('none');\n setFilterQuery('');\n setHideNonMatching(false);\n setSelectedRelationDocId('');\n setAttributeValue('');\n\n if (relationsMeta[newAttr]) {\n fetchRelationOptions(relationsMeta[newAttr].targetUid);\n } else {\n setRelationOptions([]);\n }\n\n collections.forEach((col) => {\n loadCollectionPage(col.uid, 1);\n });\n }\n };\n\n const filteredCollections = collections.filter(\n (c) =>\n visibleTypeUids[c.uid] !== false &&\n (!collectionSearch.trim() ||\n c.displayName.toLowerCase().includes(collectionSearch.toLowerCase().trim()) ||\n c.uid.toLowerCase().includes(collectionSearch.toLowerCase().trim()))\n );\n\n const handleGlobalPageSizeChange = (newSize: number) => {\n const capped = Math.min(100, Math.max(1, newSize));\n setDefaultPageSize(capped);\n collections.forEach((col) => {\n if (!col.isSingleType) {\n loadCollectionPage(col.uid, 1, capped);\n }\n });\n };\n\n const handleCollectionPageSizeChange = (colUid: string, newSize: number) => {\n const capped = Math.min(100, Math.max(1, newSize));\n loadCollectionPage(colUid, 1, capped);\n };\n\n const handleCollectionSortChange = (colUid: string, field: string, order: 'asc' | 'desc') => {\n setCollectionSorts((prev) => ({\n ...prev,\n [colUid]: { field, order },\n }));\n loadCollectionPage(colUid, 1, undefined, field, order);\n };\n\n const handleHeaderSortClick = (colUid: string, field: string) => {\n const current = collectionSorts[colUid] || { field: 'createdAt', order: 'desc' };\n const nextOrder: 'asc' | 'desc' = current.field === field && current.order === 'asc' ? 'desc' : 'asc';\n handleCollectionSortChange(colUid, field, nextOrder);\n };\n\n // Toggle single entry\n const toggleEntry = (uid: string, documentId: string) => {\n const key = `${uid}${KEY_SEP}${documentId}`;\n setSelectedEntries((prev) => ({\n ...prev,\n [key]: !prev[key],\n }));\n };\n\n // Value filter evaluation\n const entryMatchesFilter = (entry: Entry, attr: string): boolean => {\n if (filterOperator === 'none') return true;\n const val = entry[attr];\n const displayStr = formatDisplayValue(val);\n const isValEmpty =\n val === undefined ||\n val === null ||\n displayStr.trim() === '' ||\n displayStr.trim().toLowerCase() === '(not set)' ||\n displayStr.trim().toLowerCase() === '(empty / not set)' ||\n displayStr.trim().toLowerCase() === '(empty / unlinked)';\n\n switch (filterOperator) {\n case 'empty':\n return isValEmpty;\n case 'not_empty':\n return !isValEmpty;\n case 'equals':\n return !isValEmpty && displayStr.trim().toLowerCase() === filterQuery.trim().toLowerCase();\n case 'contains':\n return !isValEmpty && displayStr.toLowerCase().includes(filterQuery.trim().toLowerCase());\n case 'starts_with':\n return !isValEmpty && displayStr.trim().toLowerCase().startsWith(filterQuery.trim().toLowerCase());\n default:\n return true;\n }\n };\n\n const getVisibleEntries = (col: CollectionModel) => {\n const pageState = collectionPages[col.uid];\n const entries = pageState ? pageState.entries : (col.entries || []);\n if (!hideNonMatching || filterOperator === 'none') {\n return entries;\n }\n return entries.filter((e) => entryMatchesFilter(e, selectedAttribute));\n };\n\n const matchingEntriesCount = React.useMemo(() => {\n if (filterOperator === 'none') return 0;\n let count = 0;\n filteredCollections.forEach((col) => {\n if (col.attributes.includes(selectedAttribute)) {\n const pageState = collectionPages[col.uid];\n const entries = pageState ? pageState.entries : (col.entries || []);\n entries.forEach((entry) => {\n if (entryMatchesFilter(entry, selectedAttribute)) {\n count++;\n }\n });\n }\n });\n return count;\n }, [filteredCollections, collectionPages, selectedAttribute, filterOperator, filterQuery]);\n\n const selectAllMatching = () => {\n const updated = { ...selectedEntries };\n filteredCollections.forEach((col) => {\n if (col.attributes.includes(selectedAttribute)) {\n const pageState = collectionPages[col.uid];\n const entries = pageState ? pageState.entries : (col.entries || []);\n entries.forEach((e) => {\n if (entryMatchesFilter(e, selectedAttribute)) {\n updated[`${col.uid}${KEY_SEP}${e.documentId}`] = true;\n }\n });\n }\n });\n setSelectedEntries(updated);\n };\n\n const deselectAllMatching = () => {\n const updated = { ...selectedEntries };\n filteredCollections.forEach((col) => {\n if (col.attributes.includes(selectedAttribute)) {\n const pageState = collectionPages[col.uid];\n const entries = pageState ? pageState.entries : (col.entries || []);\n entries.forEach((e) => {\n if (entryMatchesFilter(e, selectedAttribute)) {\n delete updated[`${col.uid}${KEY_SEP}${e.documentId}`];\n }\n });\n }\n });\n setSelectedEntries(updated);\n };\n\n const clearFilter = () => {\n setFilterOperator('none');\n setFilterQuery('');\n setHideNonMatching(false);\n collections.forEach((col) => {\n loadCollectionPage(col.uid, 1);\n });\n };\n\n const isCollectionFullySelected = (col: CollectionModel) => {\n const entries = getVisibleEntries(col);\n if (!entries.length) return false;\n return entries.every((e) => selectedEntries[`${col.uid}${KEY_SEP}${e.documentId}`]);\n };\n\n const isCollectionPartiallySelected = (col: CollectionModel) => {\n const entries = getVisibleEntries(col);\n if (!entries.length) return false;\n const selectedCount = entries.filter(\n (e) => selectedEntries[`${col.uid}${KEY_SEP}${e.documentId}`]\n ).length;\n return selectedCount > 0 && selectedCount < entries.length;\n };\n\n const toggleCollection = (col: CollectionModel) => {\n const entries = getVisibleEntries(col);\n const willSelectAll = !isCollectionFullySelected(col);\n const updated = { ...selectedEntries };\n entries.forEach((e) => {\n const key = `${col.uid}${KEY_SEP}${e.documentId}`;\n if (willSelectAll) {\n updated[key] = true;\n } else {\n delete updated[key];\n }\n });\n setSelectedEntries(updated);\n };\n\n const selectAll = () => {\n const updated = { ...selectedEntries };\n filteredCollections.forEach((col) => {\n const entries = getVisibleEntries(col);\n entries.forEach((e) => {\n updated[`${col.uid}${KEY_SEP}${e.documentId}`] = true;\n });\n });\n setSelectedEntries(updated);\n };\n\n const deselectAll = () => {\n setSelectedEntries({});\n };\n\n const getSelectedBreakdown = () => {\n const breakdown: Record<string, number> = {};\n Object.keys(selectedEntries).forEach((key) => {\n if (selectedEntries[key]) {\n const parts = key.split(KEY_SEP);\n if (parts.length === 2) {\n const uid = parts[0];\n const col = collections.find((c) => c.uid === uid);\n const name = col?.displayName || uid;\n breakdown[name] = (breakdown[name] || 0) + 1;\n }\n }\n });\n return breakdown;\n };\n\n // Open Confirmation Modal\n const handleOpenConfirmModal = () => {\n if (!selectedAttribute) {\n toggleNotification({\n type: 'warning',\n message: 'Please select an attribute from the dropdown',\n });\n return;\n }\n\n if (useRegex && !license?.isPro) {\n toggleNotification({\n type: 'warning',\n message: 'Regex replacement is a Pro feature. Please activate your license in Settings.',\n });\n return;\n }\n\n const totalSelected = Object.values(selectedEntries).filter(Boolean).length;\n if (totalSelected === 0) {\n toggleNotification({\n type: 'warning',\n message: 'Please select at least one collection type or entry to update',\n });\n return;\n }\n\n setShowConfirmModal(true);\n };\n\n // Perform bulk update with chosen mode\n const executeBatchWithMode = async (\n executionMode: 'immediate' | 'queue_offpeak' | 'maker_checker',\n forceImmediate = false\n ) => {\n const targets: Array<{ uid: string; documentId: string }> = [];\n Object.keys(selectedEntries).forEach((key) => {\n if (selectedEntries[key]) {\n const parts = key.split(KEY_SEP);\n if (parts.length === 2) {\n targets.push({ uid: parts[0], documentId: parts[1] });\n }\n }\n });\n\n try {\n setUpdating(true);\n setShowConfirmModal(false);\n setLastResults(null);\n\n const payload = {\n attribute: selectedAttribute,\n value: attributeValue,\n selectedEntries: targets,\n isRegex: useRegex,\n regexPattern: regexPattern,\n executionMode,\n makerNotes: makerNotesInput,\n forceImmediate,\n publishOnApproval,\n };\n\n const res = await post('/bulk-updater/batch-update', payload);\n\n if (res.data && res.data.success) {\n if (res.data.pending) {\n toggleNotification({\n type: 'success',\n message: res.data.message || 'Batch submitted successfully.',\n });\n await fetchPendingBatches();\n setActiveTab('audit');\n } else {\n setLastResults(res.data.results || []);\n setUpdateSummary({\n updatedCount: res.data.updatedCount || 0,\n skippedCount: res.data.skippedCount || 0,\n batchId: res.data.batchId,\n });\n\n toggleNotification({\n type: 'success',\n message: `Bulk update complete! Batch ID: ${res.data.batchId}. Updated: ${res.data.updatedCount}, Skipped: ${res.data.skippedCount}`,\n });\n\n await fetchModels();\n }\n } else {\n toggleNotification({\n type: 'danger',\n message: res.data?.error || 'Batch update encountered an error',\n });\n }\n } catch (err: any) {\n toggleNotification({\n type: 'danger',\n message: err.response?.data?.error || err.message || 'Batch update failed',\n });\n } finally {\n setUpdating(false);\n setMakerNotesInput('');\n }\n };\n\n // Checker Approves Batch\n const handleApproveBatch = async (batchId: string) => {\n try {\n setApprovingBatchId(batchId);\n const res = await post(`/bulk-updater/batches/${batchId}/approve`, { executeImmediately: true });\n if (res.data && res.data.success) {\n toggleNotification({\n type: 'success',\n message: res.data.message || `Batch ${batchId} approved and executed successfully!`,\n });\n await fetchPendingBatches();\n await fetchAuditHistory();\n await fetchModels();\n } else {\n toggleNotification({\n type: 'danger',\n message: res.data?.error || 'Failed to approve batch',\n });\n }\n } catch (err: any) {\n toggleNotification({\n type: 'danger',\n message: err.response?.data?.error || err.message || 'Failed to approve batch',\n });\n } finally {\n setApprovingBatchId(null);\n }\n };\n\n // Checker Rejects Batch\n const handleRejectBatch = async (batchId: string) => {\n const reason = window.prompt('Enter reason for rejection:', 'Does not meet release criteria') || 'Rejected by Checker';\n try {\n setRejectingBatchId(batchId);\n const res = await post(`/bulk-updater/batches/${batchId}/reject`, { reason });\n if (res.data && res.data.success) {\n toggleNotification({\n type: 'info',\n message: `Batch ${batchId} rejected: ${reason}`,\n });\n await fetchPendingBatches();\n } else {\n toggleNotification({\n type: 'danger',\n message: res.data?.error || 'Failed to reject batch',\n });\n }\n } catch (err: any) {\n toggleNotification({\n type: 'danger',\n message: err.response?.data?.error || err.message || 'Failed to reject batch',\n });\n } finally {\n setRejectingBatchId(null);\n }\n };\n\n // Execute Queued Batch Immediately\n const handleExecuteNow = async (batchId: string) => {\n try {\n setExecutingNowBatchId(batchId);\n const res = await post(`/bulk-updater/batches/${batchId}/execute-now`);\n if (res.data && res.data.success) {\n toggleNotification({\n type: 'success',\n message: `Batch ${batchId} executed immediately!`,\n });\n await fetchPendingBatches();\n await fetchAuditHistory();\n await fetchModels();\n } else {\n toggleNotification({\n type: 'danger',\n message: res.data?.error || 'Failed to execute batch',\n });\n }\n } catch (err: any) {\n toggleNotification({\n type: 'danger',\n message: err.response?.data?.error || err.message || 'Failed to execute batch',\n });\n } finally {\n setExecutingNowBatchId(null);\n }\n };\n\n // Perform Rollback\n const handleRollback = async (batchId: string) => {\n if (!window.confirm(`Are you sure you want to roll back all changes made in batch \"${batchId}\"?`)) {\n return;\n }\n\n try {\n setRollingBackBatchId(batchId);\n const res = await post(`/bulk-updater/audit/${batchId}/rollback`);\n\n if (res.data && res.data.success) {\n toggleNotification({\n type: 'success',\n message: `Batch \"${batchId}\" rolled back successfully! Reverted ${res.data.revertedCount} entries.`,\n });\n await fetchAuditHistory();\n await fetchModels();\n } else {\n toggleNotification({\n type: 'danger',\n message: res.data?.error || 'Rollback failed.',\n });\n }\n } catch (err: any) {\n toggleNotification({\n type: 'danger',\n message: err.response?.data?.error || err.message || 'Rollback encountered an error.',\n });\n } finally {\n setRollingBackBatchId(null);\n }\n };\n\n const totalSelectedCount = Object.values(selectedEntries).filter(Boolean).length;\n const rootRef = React.useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (rootRef.current && rootRef.current.parentElement) {\n rootRef.current.parentElement.style.minWidth = '0';\n rootRef.current.parentElement.style.maxWidth = '100%';\n }\n }, []);\n\n return (\n <Box\n ref={rootRef}\n className=\"bulk-updater-root\"\n padding={8}\n background=\"neutral100\"\n style={{ width: '100%', maxWidth: '100%', minWidth: 0, boxSizing: 'border-box' }}\n >\n <style>{`\n /* Prevent page-level horizontal overflow under any circumstance */\n html, body {\n overflow-x: hidden !important;\n max-width: 100vw !important;\n }\n div:has(> .bulk-updater-root) {\n min-width: 0 !important;\n max-width: 100% !important;\n width: 100% !important;\n flex: 1 1 0% !important;\n overflow-x: clip !important;\n }\n .bulk-updater-root {\n min-width: 0 !important;\n max-width: 100% !important;\n width: 100% !important;\n box-sizing: border-box !important;\n overflow-x: clip !important;\n }\n /* All tables stretch to take the full available container space */\n .bulk-updater-root table {\n width: 100% !important;\n min-width: 0 !important;\n }\n .bulk-updater-root div:has(> table) {\n width: 100% !important;\n max-width: 100% !important;\n min-width: 0 !important;\n }\n /* Table scroll container keeps horizontal scroll strictly at the table level */\n .bulk-updater-table-container {\n width: 100% !important;\n max-width: 100% !important;\n min-width: 0 !important;\n overflow-x: auto !important;\n -webkit-overflow-scrolling: touch;\n }\n .bulk-updater-table-container::-webkit-scrollbar {\n height: 8px;\n }\n .bulk-updater-table-container::-webkit-scrollbar-track {\n background: rgba(120, 120, 150, 0.1);\n border-radius: 4px;\n }\n .bulk-updater-table-container::-webkit-scrollbar-thumb {\n background: rgba(120, 120, 150, 0.4);\n border-radius: 4px;\n }\n .bulk-updater-table-container::-webkit-scrollbar-thumb:hover {\n background: rgba(120, 120, 150, 0.7);\n }\n `}</style>\n {/* Page Header */}\n <Flex direction=\"column\" alignItems=\"flex-start\" gap={2} marginBottom={6}>\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <Box>\n <Flex gap={3} alignItems=\"center\">\n <Typography variant=\"alpha\" tag=\"h1\" fontWeight=\"bold\">\n Bulk Attribute Updater\n </Typography>\n <Badge\n backgroundColor={license?.isPro ? 'success100' : 'neutral200'}\n textColor={license?.isPro ? 'success700' : 'neutral700'}\n >\n {license?.isPro ? `${license.tier.toUpperCase()} EDITION` : 'COMMUNITY EDITION'}\n </Badge>\n {auditEnabled && (\n <Badge backgroundColor=\"secondary100\" textColor=\"secondary700\">\n AUDIT &amp; ROLLBACK ACTIVE\n </Badge>\n )}\n </Flex>\n <Typography variant=\"omega\" textColor=\"neutral600\">\n Cross-collection batch attribute management with declarative audit trail and one-click rollback.\n </Typography>\n </Box>\n <Flex gap={2}>\n <Button\n startIcon={<ArrowClockwise />}\n variant=\"tertiary\"\n onClick={activeTab === 'editor' ? fetchModels : fetchAuditHistory}\n loading={loading || auditLoading}\n >\n Refresh\n </Button>\n </Flex>\n </Flex>\n </Flex>\n\n {/* Tab Navigation */}\n <Flex gap={2} marginBottom={4} wrap=\"wrap\" justifyContent=\"space-between\" alignItems=\"center\">\n <Flex gap={2}>\n <Button\n variant={activeTab === 'editor' ? 'default' : 'tertiary'}\n onClick={() => setActiveTab('editor')}\n size=\"M\"\n >\n Bulk Updater Workspace\n </Button>\n <Button\n variant={activeTab === 'audit' ? 'default' : 'tertiary'}\n onClick={() => setActiveTab('audit')}\n size=\"M\"\n >\n Audit Trail &amp; Approvals\n {pendingBatches.filter((b) => b.status === 'pending_approval' || b.status === 'queued_offpeak').length > 0 ? (\n <Badge backgroundColor=\"warning100\" textColor=\"warning700\" style={{ marginLeft: 8 }}>\n {pendingBatches.filter((b) => b.status === 'pending_approval' || b.status === 'queued_offpeak').length} PENDING\n </Badge>\n ) : auditHistory.length > 0 ? (\n ` (${auditHistory.length})`\n ) : (\n ''\n )}\n </Button>\n </Flex>\n\n {/* Server Policy Indicator */}\n {executionWindow && (\n <Flex gap={2} alignItems=\"center\">\n <Badge\n backgroundColor={executionWindow.isBusinessHours ? 'warning100' : 'success100'}\n textColor={executionWindow.isBusinessHours ? 'warning700' : 'success700'}\n >\n {executionWindow.isBusinessHours\n ? `PEAK HOURS (${executionWindow.businessHours?.start} - ${executionWindow.businessHours?.end} ${executionWindow.timeZone || ''}) • OFF-PEAK QUEUE ACTIVE`\n : `OFF-PEAK WINDOW ACTIVE (${executionWindow.timeZone || ''}) • DIRECT EXECUTION PERMITTED`}\n </Badge>\n </Flex>\n )}\n </Flex>\n\n {/* Quick Rollback Banner for Workspace */}\n {activeTab === 'editor' && latestActiveBatch && !updateSummary && (\n <Box\n padding={3}\n paddingLeft={4}\n paddingRight={4}\n background=\"neutral0\"\n shadow=\"filterShadow\"\n hasRadius\n marginBottom={4}\n style={{ borderLeft: '4px solid #4945ff' }}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" wrap=\"wrap\" gap={2}>\n <Flex gap={2} alignItems=\"center\">\n <Badge backgroundColor=\"primary100\" textColor=\"primary700\">\n ACTIVE BATCH\n </Badge>\n <Typography variant=\"pi\" textColor=\"neutral700\">\n <code>{latestActiveBatch.batchId}</code> ({latestActiveBatch.recordCount} entries updated by {latestActiveBatch.userEmail})\n </Typography>\n </Flex>\n <Flex gap={2}>\n <Button\n variant=\"danger-light\"\n size=\"S\"\n startIcon={<ArrowClockwise />}\n onClick={() => handleRollback(latestActiveBatch.batchId)}\n loading={rollingBackBatchId === latestActiveBatch.batchId}\n >\n Rollback This Batch\n </Button>\n <Button\n variant=\"tertiary\"\n size=\"S\"\n onClick={() => setActiveTab('audit')}\n >\n View Rollback History →\n </Button>\n </Flex>\n </Flex>\n </Box>\n )}\n\n {/* ======================================================== */}\n {/* TAB 1: BULK UPDATER EDITOR */}\n {/* ======================================================== */}\n {activeTab === 'editor' && (\n <>\n {/* Main Control Panel: Attribute Dropdown + Value Input + Action Button */}\n <Box\n padding={6}\n background=\"neutral0\"\n shadow=\"filterShadow\"\n hasRadius\n marginBottom={6}\n style={{ width: '100%', maxWidth: '100%', minWidth: 0, boxSizing: 'border-box' }}\n >\n <Typography variant=\"delta\" tag=\"h2\" marginBottom={4} fontWeight=\"semiBold\">\n 1. Configure Attribute Update\n </Typography>\n\n <Flex gap={4} alignItems=\"flex-end\" wrap=\"wrap\">\n {/* Attribute Dropdown */}\n <Box style={{ minWidth: 260 }}>\n <SingleSelect\n label=\"Attribute to Update\"\n placeholder=\"Select an attribute...\"\n value={selectedAttribute}\n onChange={(val) => handleAttributeChange(String(val))}\n >\n {attributes.map((attr) => {\n const rel = relationsMeta[attr];\n return (\n <SingleSelectOption key={attr} value={attr}>\n {attr} {rel ? `(relation ➔ ${rel.targetDisplayName})` : ''}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </Box>\n\n {/* New Value Input or Relation Target Selector */}\n <Box style={{ flex: 1, minWidth: 340 }}>\n {relationsMeta[selectedAttribute] ? (\n <Flex direction=\"column\" gap={1} style={{ width: '100%' }}>\n <Flex gap={2} alignItems=\"center\" wrap=\"wrap\">\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral700\">\n Target {relationsMeta[selectedAttribute].targetDisplayName} Relation:\n </Typography>\n <Badge backgroundColor=\"secondary100\" textColor=\"secondary700\">\n {relationsMeta[selectedAttribute].relationType} &rarr; {relationsMeta[selectedAttribute].targetDisplayName}\n </Badge>\n {relationsMeta[selectedAttribute].isMulti && (\n <Badge backgroundColor=\"primary100\" textColor=\"primary700\">\n Multi-Relation\n </Badge>\n )}\n </Flex>\n <Flex gap={2} alignItems=\"center\" style={{ width: '100%' }}>\n <Box style={{ flex: 1, minWidth: 200 }}>\n <SingleSelect\n label={`Choose ${relationsMeta[selectedAttribute].targetDisplayName}`}\n placeholder={relationOptionsLoading ? 'Loading entities...' : `Pick a ${relationsMeta[selectedAttribute].targetDisplayName}...`}\n value={selectedRelationDocId}\n onChange={(val) => {\n const docId = String(val);\n setSelectedRelationDocId(docId);\n if (docId === '__clear__') {\n setAttributeValue(JSON.stringify({ mode: 'clear', label: '(clear relation)' }));\n } else {\n const opt = relationOptions.find((o) => o.documentId === docId);\n setAttributeValue(JSON.stringify({ mode: relationMode, documentIds: [docId], label: opt?.label || docId }));\n }\n }}\n >\n <SingleSelectOption value=\"__clear__\">-- Clear / Unlink Relation --</SingleSelectOption>\n {relationOptions.map((opt) => (\n <SingleSelectOption key={opt.documentId} value={opt.documentId}>\n {opt.label}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </Box>\n {relationsMeta[selectedAttribute].isMulti && (\n <Box style={{ width: 170 }}>\n <SingleSelect\n label=\"Action Mode\"\n value={relationMode}\n onChange={(val) => {\n const m = String(val) as 'set' | 'connect' | 'disconnect' | 'clear';\n setRelationMode(m);\n if (selectedRelationDocId) {\n if (selectedRelationDocId === '__clear__' || m === 'clear') {\n setAttributeValue(JSON.stringify({ mode: 'clear', label: '(clear relation)' }));\n } else {\n const opt = relationOptions.find((o) => o.documentId === selectedRelationDocId);\n setAttributeValue(JSON.stringify({ mode: m, documentIds: [selectedRelationDocId], label: opt?.label || selectedRelationDocId }));\n }\n }\n }}\n >\n <SingleSelectOption value=\"set\">Set / Overwrite</SingleSelectOption>\n <SingleSelectOption value=\"connect\">Add / Connect</SingleSelectOption>\n <SingleSelectOption value=\"disconnect\">Remove / Disconnect</SingleSelectOption>\n <SingleSelectOption value=\"clear\">Clear All</SingleSelectOption>\n </SingleSelect>\n </Box>\n )}\n </Flex>\n </Flex>\n ) : (\n <TextInput\n label={useRegex ? 'Replacement Value' : 'New Attribute Value'}\n name=\"attributeValue\"\n placeholder={useRegex ? 'Replace matched pattern with...' : 'Enter the value to apply...'}\n value={attributeValue}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setAttributeValue(e.target.value)\n }\n />\n )}\n </Box>\n\n {/* Update Action Button */}\n <Box>\n <Button\n startIcon={<Play />}\n variant=\"default\"\n size=\"L\"\n onClick={handleOpenConfirmModal}\n loading={updating}\n disabled={loading || totalSelectedCount === 0}\n >\n Update Selected ({totalSelectedCount})\n </Button>\n </Box>\n </Flex>\n\n {/* Pro Feature: Regex Search & Replace */}\n <Box marginTop={4} padding={4} background=\"neutral100\" hasRadius>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" wrap=\"wrap\" gap={3}>\n <Flex gap={2} alignItems=\"center\">\n <Checkbox\n checked={useRegex}\n onCheckedChange={(checked: boolean) => setUseRegex(Boolean(checked))}\n >\n <Typography fontWeight=\"bold\">Enable Regex Find &amp; Replace</Typography>\n </Checkbox>\n <Badge\n backgroundColor={license?.isPro ? 'success100' : 'warning100'}\n textColor={license?.isPro ? 'success700' : 'warning700'}\n >\n {license?.isPro ? 'PRO UNLOCKED' : 'PRO FEATURE'}\n </Badge>\n </Flex>\n {useRegex && (\n <Box style={{ flex: 1, minWidth: 240 }}>\n <TextInput\n placeholder=\"Regex pattern (e.g. \\b(OldName)\\b)...\"\n value={regexPattern}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setRegexPattern(e.target.value)\n }\n disabled={!license?.isPro}\n />\n </Box>\n )}\n </Flex>\n {!license?.isPro && useRegex && (\n <Box marginTop={2}>\n <Typography variant=\"pi\" textColor=\"warning700\">\n Regex replacement is locked to Pro license holders. Visit Settings &gt; Bulk Updater to activate your key.\n </Typography>\n </Box>\n )}\n </Box>\n\n {/* Selected Attribute Context Hint */}\n {selectedAttribute && (\n <Box marginTop={4} padding={3} background=\"neutral100\" hasRadius>\n <Flex gap={2} alignItems=\"center\" wrap=\"wrap\">\n <Typography variant=\"pi\" fontWeight=\"bold\">\n Attribute Info:\n </Typography>\n <Typography variant=\"pi\">\n Targeting attribute <strong>{selectedAttribute}</strong>.\n </Typography>\n {collections.map((c) => {\n const hasAttr = c.attributes.includes(selectedAttribute);\n return (\n <Badge\n key={c.uid}\n backgroundColor={hasAttr ? 'success100' : 'neutral200'}\n textColor={hasAttr ? 'success700' : 'neutral600'}\n >\n {c.displayName}: {hasAttr ? 'Attribute exists' : 'Not in schema'}\n </Badge>\n );\n })}\n </Flex>\n </Box>\n )}\n </Box>\n\n {/* Target Selection: Collections & Entries */}\n <Box\n padding={6}\n background=\"neutral0\"\n shadow=\"filterShadow\"\n hasRadius\n marginBottom={6}\n style={{ width: '100%', maxWidth: '100%', minWidth: 0, boxSizing: 'border-box' }}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" marginBottom={4} wrap=\"wrap\" gap={3}>\n <Box>\n <Typography variant=\"delta\" tag=\"h2\" fontWeight=\"semiBold\">\n 2. Select Targets\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n Pick entire collection types or individual entries to apply the update to.\n </Typography>\n </Box>\n <Flex gap={2}>\n <Button variant=\"secondary\" size=\"S\" onClick={selectAll}>\n Select All\n </Button>\n <Button variant=\"tertiary\" size=\"S\" onClick={deselectAll}>\n Deselect All\n </Button>\n </Flex>\n </Flex>\n\n {/* Target Value Filter Bar (\"Find items by value first\") */}\n <Box\n padding={4}\n background=\"neutral100\"\n hasRadius\n marginBottom={5}\n style={{ width: '100%', maxWidth: '100%', boxSizing: 'border-box' }}\n >\n <Flex direction=\"column\" gap={3}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" wrap=\"wrap\" gap={2}>\n <Flex gap={2} alignItems=\"center\">\n <Typography variant=\"omega\" fontWeight=\"bold\">\n Find Targets by Current Value:\n </Typography>\n {filterOperator !== 'none' && (\n <Badge backgroundColor=\"primary100\" textColor=\"primary700\">\n {matchingEntriesCount} matching {matchingEntriesCount === 1 ? 'entry' : 'entries'}\n </Badge>\n )}\n </Flex>\n {filterOperator !== 'none' && (\n <Button variant=\"ghost\" size=\"S\" onClick={clearFilter}>\n Clear Filter\n </Button>\n )}\n </Flex>\n\n <Flex gap={3} alignItems=\"flex-end\" wrap=\"wrap\">\n {/* Operator Select */}\n <Box style={{ width: 240, minWidth: 200 }}>\n <SingleSelect\n label={`Filter condition for \"${selectedAttribute}\"`}\n value={filterOperator}\n onChange={(val) => setFilterOperator(String(val) as FilterOperator)}\n >\n <SingleSelectOption value=\"none\">Show All (No Filter)</SingleSelectOption>\n <SingleSelectOption value=\"empty\">Is Empty or Null</SingleSelectOption>\n <SingleSelectOption value=\"not_empty\">Is Not Empty</SingleSelectOption>\n <SingleSelectOption value=\"equals\">Equals Exact Text</SingleSelectOption>\n <SingleSelectOption value=\"contains\">Contains Substring</SingleSelectOption>\n <SingleSelectOption value=\"starts_with\">Starts With</SingleSelectOption>\n </SingleSelect>\n </Box>\n\n {/* Value query input if needed */}\n {(filterOperator === 'equals' || filterOperator === 'contains' || filterOperator === 'starts_with') && (\n <Box style={{ flex: 1, minWidth: 220 }}>\n <TextInput\n label=\"Value to Search\"\n placeholder=\"Type value to match...\"\n value={filterQuery}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setFilterQuery(e.target.value)}\n />\n </Box>\n )}\n\n {/* Quick Action Buttons when filter is active */}\n {filterOperator !== 'none' && (\n <Flex gap={2} alignItems=\"center\">\n <Button\n variant=\"default\"\n size=\"S\"\n onClick={selectAllMatching}\n disabled={matchingEntriesCount === 0}\n >\n Select Matching ({matchingEntriesCount})\n </Button>\n <Button\n variant=\"tertiary\"\n size=\"S\"\n onClick={deselectAllMatching}\n disabled={matchingEntriesCount === 0}\n >\n Deselect Matching\n </Button>\n </Flex>\n )}\n </Flex>\n\n {/* Filter Options: Toggle hide non-matching */}\n {filterOperator !== 'none' && (\n <Flex gap={2} alignItems=\"center\" marginTop={1}>\n <Checkbox\n checked={hideNonMatching}\n onCheckedChange={(checked: boolean) => setHideNonMatching(Boolean(checked))}\n >\n <Typography variant=\"pi\" textColor=\"neutral700\">\n Only display matching entries in tables (hide non-matching)\n </Typography>\n </Checkbox>\n </Flex>\n )}\n </Flex>\n </Box>\n\n {/* Advanced Content Type Visibility Filter */}\n {collections.length > 0 && (\n <Box\n padding={4}\n background=\"neutral100\"\n hasRadius\n marginBottom={4}\n style={{ width: '100%', maxWidth: '100%', boxSizing: 'border-box' }}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" wrap=\"wrap\" gap={2} marginBottom={3}>\n <Flex gap={2} alignItems=\"center\">\n <Typography variant=\"omega\" fontWeight=\"bold\">\n Filter Visible Content Types:\n </Typography>\n <Badge backgroundColor=\"primary100\" textColor=\"primary700\">\n {filteredCollections.length} of {collections.length} visible\n </Badge>\n </Flex>\n <Flex gap={2} alignItems=\"center\">\n <Button\n variant=\"tertiary\"\n size=\"S\"\n onClick={() => {\n const allVis: Record<string, boolean> = {};\n collections.forEach((c) => (allVis[c.uid] = true));\n setVisibleTypeUids(allVis);\n }}\n >\n Show All Types\n </Button>\n <Button\n variant=\"tertiary\"\n size=\"S\"\n onClick={() => {\n const allVis: Record<string, boolean> = {};\n collections.forEach((c) => (allVis[c.uid] = false));\n setVisibleTypeUids(allVis);\n }}\n >\n Hide All Types\n </Button>\n </Flex>\n </Flex>\n\n <Flex wrap=\"wrap\" gap={2} alignItems=\"center\">\n {collections.map((col) => {\n const isVisible = visibleTypeUids[col.uid] !== false;\n return (\n <Box\n key={col.uid}\n padding={2}\n paddingLeft={3}\n paddingRight={3}\n background={isVisible ? 'neutral0' : 'neutral200'}\n hasRadius\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n borderColor={isVisible ? 'primary200' : 'neutral300'}\n >\n <Flex gap={2} alignItems=\"center\">\n <Checkbox\n checked={isVisible}\n onCheckedChange={(checked: boolean) =>\n setVisibleTypeUids((prev) => ({ ...prev, [col.uid]: Boolean(checked) }))\n }\n >\n <Typography fontWeight={isVisible ? 'semiBold' : 'regular'}>\n {col.displayName}\n </Typography>\n </Checkbox>\n {col.isSingleType ? (\n <Badge backgroundColor=\"secondary100\" textColor=\"secondary700\" size=\"S\">\n Single Type\n </Badge>\n ) : (\n <Badge backgroundColor=\"neutral150\" textColor=\"neutral600\" size=\"S\">\n Collection\n </Badge>\n )}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n </Box>\n )}\n\n {/* Filter Search & Global Page Size Controls */}\n <Flex justifyContent=\"space-between\" alignItems=\"center\" marginBottom={4} wrap=\"wrap\" gap={3}>\n {collections.length > 1 && (\n <Box style={{ flex: 1, maxWidth: 360, minWidth: 220 }}>\n <TextInput\n label=\"Search Content Types\"\n placeholder=\"Search by name or UID...\"\n value={collectionSearch}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setCollectionSearch(e.target.value)\n }\n />\n </Box>\n )}\n <Flex gap={2} alignItems=\"center\" style={{ marginLeft: 'auto' }}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n Default page size (max 100):\n </Typography>\n <Box style={{ width: 120 }}>\n <SingleSelect\n size=\"S\"\n value={String(defaultPageSize)}\n onChange={(val) => handleGlobalPageSizeChange(Number(val))}\n >\n <SingleSelectOption value=\"5\">5 / page</SingleSelectOption>\n <SingleSelectOption value=\"10\">10 / page</SingleSelectOption>\n <SingleSelectOption value=\"25\">25 / page</SingleSelectOption>\n <SingleSelectOption value=\"50\">50 / page</SingleSelectOption>\n <SingleSelectOption value=\"100\">100 / page</SingleSelectOption>\n </SingleSelect>\n </Box>\n </Flex>\n </Flex>\n\n {filteredCollections.length === 0 ? (\n <Box padding={6} background=\"neutral100\" hasRadius style={{ textAlign: 'center' }}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n No content types match the visibility or search filters.\n </Typography>\n </Box>\n ) : (\n filteredCollections.map((col) => {\n const pageState = collectionPages[col.uid];\n const entries = pageState ? pageState.entries : (col.entries || []);\n const totalEntries = pageState ? pageState.total : (col.totalEntries !== undefined ? col.totalEntries : entries.length);\n const page = pageState ? pageState.page : 1;\n const pageCount = pageState ? pageState.pageCount : 1;\n const pageSize = pageState ? pageState.pageSize : defaultPageSize;\n const hasAttr = col.attributes.includes(selectedAttribute);\n const visibleEntries = getVisibleEntries(col);\n const matchingColCount = entries.filter((e) => entryMatchesFilter(e, selectedAttribute)).length;\n const isFullySelected = isCollectionFullySelected(col);\n const isPartiallySelected = isCollectionPartiallySelected(col);\n const currentSort = collectionSorts[col.uid] || { field: 'createdAt', order: 'desc' };\n const availableColumns = getAvailableColumnsForCollection(col, selectedAttribute);\n const savedColKeys = collectionColumnVisibility[col.uid];\n const activeColumns = savedColKeys\n ? availableColumns.filter((c) => c.isPermanent || savedColKeys.includes(c.key))\n : availableColumns.filter((c) => c.defaultVisible);\n\n return (\n <Box\n key={col.uid}\n marginBottom={5}\n padding={4}\n hasRadius\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n borderColor=\"neutral200\"\n background=\"neutral0\"\n style={{ width: '100%', maxWidth: '100%', minWidth: 0, boxSizing: 'border-box' }}\n >\n {/* Collection Header */}\n <Flex justifyContent=\"space-between\" alignItems=\"center\" marginBottom={3} wrap=\"wrap\" gap={2}>\n <Flex gap={3} alignItems=\"center\" wrap=\"wrap\">\n <Checkbox\n checked={isFullySelected}\n indeterminate={isPartiallySelected ? true : undefined}\n onCheckedChange={() => toggleCollection(col)}\n >\n <Typography variant=\"beta\" fontWeight=\"bold\">\n {col.displayName} {col.isSingleType ? '(Single Type)' : 'Collection'}\n </Typography>\n </Checkbox>\n {col.isSingleType ? (\n <Badge backgroundColor=\"secondary100\" textColor=\"secondary700\">\n Single Type\n </Badge>\n ) : (\n <Badge\n backgroundColor={hasAttr ? 'success100' : 'warning100'}\n textColor={hasAttr ? 'success700' : 'warning700'}\n >\n {hasAttr\n ? `Schema has \"${selectedAttribute}\"`\n : `Schema lacks \"${selectedAttribute}\" (will skip)`}\n </Badge>\n )}\n </Flex>\n\n <Flex gap={3} alignItems=\"center\" wrap=\"wrap\">\n {!col.isSingleType && (\n <Flex gap={2} alignItems=\"center\">\n <Typography variant=\"pi\" textColor=\"neutral600\">\n Sort:\n </Typography>\n <Box style={{ width: 190 }}>\n <SingleSelect\n size=\"S\"\n value={`${currentSort.field}:${currentSort.order}`}\n onChange={(val) => {\n const [f, o] = String(val).split(':');\n handleCollectionSortChange(col.uid, f, o as 'asc' | 'desc');\n }}\n >\n <SingleSelectOption value=\"createdAt:desc\">Created: Newest</SingleSelectOption>\n <SingleSelectOption value=\"createdAt:asc\">Created: Oldest</SingleSelectOption>\n {hasAttr && (\n <>\n <SingleSelectOption value={`${selectedAttribute}:asc`}>\n {selectedAttribute} (A &rarr; Z)\n </SingleSelectOption>\n <SingleSelectOption value={`${selectedAttribute}:desc`}>\n {selectedAttribute} (Z &rarr; A)\n </SingleSelectOption>\n </>\n )}\n {col.attributes.includes('name') && (\n <>\n <SingleSelectOption value=\"name:asc\">Name (A &rarr; Z)</SingleSelectOption>\n <SingleSelectOption value=\"name:desc\">Name (Z &rarr; A)</SingleSelectOption>\n </>\n )}\n {col.attributes.includes('title') && (\n <>\n <SingleSelectOption value=\"title:asc\">Title (A &rarr; Z)</SingleSelectOption>\n <SingleSelectOption value=\"title:desc\">Title (Z &rarr; A)</SingleSelectOption>\n </>\n )}\n </SingleSelect>\n </Box>\n </Flex>\n )}\n\n <Button\n variant={openColumnPickerUid === col.uid ? 'secondary' : 'tertiary'}\n size=\"S\"\n onClick={() => setOpenColumnPickerUid(openColumnPickerUid === col.uid ? null : col.uid)}\n >\n Columns ({activeColumns.filter((c) => !c.isPermanent).length}/{availableColumns.filter((c) => !c.isPermanent).length})\n </Button>\n\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {col.isSingleType\n ? '1 single entry'\n : filterOperator !== 'none'\n ? `${matchingColCount} matching of ${totalEntries} entries`\n : `${totalEntries} entries`}\n </Typography>\n </Flex>\n </Flex>\n\n {/* Column Visibility Selector Panel */}\n {openColumnPickerUid === col.uid && (\n <Box\n padding={3}\n marginBottom={3}\n background=\"neutral100\"\n hasRadius\n borderColor=\"neutral200\"\n style={{ border: '1px solid #dcdce4' }}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" wrap=\"wrap\" gap={3}>\n <Flex gap={3} alignItems=\"center\" wrap=\"wrap\">\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral700\">\n Columns for {col.displayName}:\n </Typography>\n {availableColumns\n .filter((c) => !c.isPermanent)\n .map((c) => {\n const isChecked = activeColumns.some((ac) => ac.key === c.key);\n return (\n <Box key={c.key}>\n <Checkbox\n checked={isChecked}\n onCheckedChange={() => toggleColumn(col.uid, c.key, availableColumns)}\n >\n <Typography variant=\"pi\">{c.label}</Typography>\n </Checkbox>\n </Box>\n );\n })}\n </Flex>\n <Flex gap={2}>\n <Button\n variant=\"tertiary\"\n size=\"S\"\n onClick={() => showAllColumns(col.uid, availableColumns)}\n >\n Show All\n </Button>\n <Button\n variant=\"tertiary\"\n size=\"S\"\n onClick={() => resetDefaultColumns(col.uid, availableColumns)}\n >\n Reset\n </Button>\n <Button\n variant=\"ghost\"\n size=\"S\"\n onClick={() => setOpenColumnPickerUid(null)}\n >\n Close\n </Button>\n </Flex>\n </Flex>\n </Box>\n )}\n\n {/* Entries Table */}\n <Box className=\"bulk-updater-table-container\" style={{ width: '100%', maxWidth: '100%', minWidth: 0, overflowX: 'auto' }}>\n <Table colCount={activeColumns.length} rowCount={visibleEntries.length + 1} style={{ width: '100%' }}>\n <Thead>\n <Tr>\n {activeColumns.map((colDef) =>\n renderHeaderCell(colDef, col, currentSort, selectedAttribute, handleHeaderSortClick)\n )}\n </Tr>\n </Thead>\n <Tbody>\n {visibleEntries.length === 0 ? (\n <Tr>\n <Td colSpan={activeColumns.length}>\n <Box padding={4} style={{ textAlign: 'center' }}>\n <Typography variant=\"pi\" textColor=\"neutral500\">\n No entries in this content type match the active filter criteria.\n </Typography>\n </Box>\n </Td>\n </Tr>\n ) : (\n visibleEntries.map((entry) => {\n const key = `${col.uid}${KEY_SEP}${entry.documentId}`;\n const isSelected = Boolean(selectedEntries[key]);\n const isMatch = filterOperator !== 'none' && entryMatchesFilter(entry, selectedAttribute);\n\n return (\n <Tr\n key={key}\n style={{\n backgroundColor: isSelected\n ? 'rgba(73, 69, 255, 0.14)'\n : isMatch\n ? 'rgba(46, 213, 115, 0.08)'\n : undefined,\n boxShadow: isSelected\n ? 'inset 3px 0 0 0 #4945ff'\n : isMatch\n ? 'inset 3px 0 0 0 #2ed573'\n : undefined,\n }}\n >\n {activeColumns.map((colDef) => (\n <Td key={colDef.key}>\n {renderCellContent(\n colDef,\n entry,\n col,\n selectedAttribute,\n isMatch,\n hasAttr,\n isSelected,\n () => toggleEntry(col.uid, entry.documentId)\n )}\n </Td>\n ))}\n </Tr>\n );\n })\n )}\n </Tbody>\n </Table>\n </Box>\n\n {/* Server-Side Pagination & Page Size Controls */}\n {!col.isSingleType && (\n <Flex justifyContent=\"space-between\" alignItems=\"center\" marginTop={4} wrap=\"wrap\" gap={3}>\n <Flex gap={3} alignItems=\"center\" wrap=\"wrap\">\n <Typography variant=\"pi\" textColor=\"neutral600\">\n Showing {totalEntries === 0 ? 0 : Math.min((page - 1) * pageSize + 1, totalEntries)} to {Math.min(page * pageSize, totalEntries)} of {totalEntries} entries\n </Typography>\n <Flex gap={1} alignItems=\"center\">\n <Typography variant=\"pi\" textColor=\"neutral600\">Show:</Typography>\n <Box style={{ width: 80 }}>\n <SingleSelect\n size=\"S\"\n value={String(pageSize)}\n onChange={(val) => handleCollectionPageSizeChange(col.uid, Number(val))}\n >\n <SingleSelectOption value=\"5\">5</SingleSelectOption>\n <SingleSelectOption value=\"10\">10</SingleSelectOption>\n <SingleSelectOption value=\"25\">25</SingleSelectOption>\n <SingleSelectOption value=\"50\">50</SingleSelectOption>\n <SingleSelectOption value=\"100\">100</SingleSelectOption>\n </SingleSelect>\n </Box>\n <Typography variant=\"pi\" textColor=\"neutral500\">per page</Typography>\n </Flex>\n </Flex>\n\n {pageCount > 1 && (\n <Flex gap={2} alignItems=\"center\">\n <Button\n variant=\"tertiary\"\n size=\"S\"\n disabled={page <= 1 || pageState?.loading}\n onClick={() => loadCollectionPage(col.uid, page - 1)}\n >\n &larr; Previous\n </Button>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n Page {page} of {pageCount}\n </Typography>\n <Button\n variant=\"tertiary\"\n size=\"S\"\n disabled={page >= pageCount || pageState?.loading}\n onClick={() => loadCollectionPage(col.uid, page + 1)}\n >\n Next &rarr;\n </Button>\n </Flex>\n )}\n </Flex>\n )}\n </Box>\n );\n })\n )}\n </Box>\n\n {/* Execution Results Feedback */}\n {updateSummary && (\n <Box\n padding={6}\n background=\"neutral0\"\n shadow=\"filterShadow\"\n hasRadius\n marginBottom={6}\n >\n <Typography variant=\"delta\" tag=\"h2\" fontWeight=\"semiBold\" marginBottom={3}>\n 3. Execution Results\n </Typography>\n\n <Alert\n title=\"Batch Update Completed\"\n variant={updateSummary.updatedCount > 0 ? 'success' : 'default'}\n closeLabel=\"Close\"\n onClose={() => setUpdateSummary(null)}\n marginBottom={4}\n >\n <Flex direction=\"column\" alignItems=\"flex-start\" gap={3} width=\"100%\">\n <Typography variant=\"omega\">\n Successfully updated <strong>{updateSummary.updatedCount}</strong> records.\n Skipped <strong>{updateSummary.skippedCount}</strong> records.\n {updateSummary.batchId && (\n <span>\n {' '}Transaction Batch ID: <code>{updateSummary.batchId}</code> (logged to audit trail).\n </span>\n )}\n </Typography>\n {updateSummary.batchId && (\n <Flex gap={2} marginTop={1}>\n <Button\n variant=\"danger-light\"\n size=\"S\"\n startIcon={<ArrowClockwise />}\n onClick={() => handleRollback(updateSummary.batchId!)}\n loading={rollingBackBatchId === updateSummary.batchId}\n >\n Rollback This Batch\n </Button>\n <Button\n variant=\"tertiary\"\n size=\"S\"\n onClick={() => setActiveTab('audit')}\n >\n View in Audit Trail &amp; Rollback History →\n </Button>\n </Flex>\n )}\n </Flex>\n </Alert>\n\n {lastResults && lastResults.length > 0 && (\n <Table colCount={4} rowCount={lastResults.length + 1}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\">Collection</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Entry</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Status</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Details</Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {lastResults.map((res, idx) => (\n <Tr key={idx}>\n <Td>\n <Typography fontWeight=\"bold\">{res.collectionName}</Typography>\n </Td>\n <Td>\n <Typography>{res.label}</Typography>\n </Td>\n <Td>\n {res.status === 'updated' && (\n <Badge backgroundColor=\"success100\" textColor=\"success700\">\n Updated\n </Badge>\n )}\n {res.status === 'skipped' && (\n <Badge backgroundColor=\"warning100\" textColor=\"warning700\">\n Skipped\n </Badge>\n )}\n {res.status === 'error' && (\n <Badge backgroundColor=\"danger100\" textColor=\"danger700\">\n Error\n </Badge>\n )}\n </Td>\n <Td>\n <Typography variant=\"pi\" textColor=\"neutral700\">\n {res.message}\n </Typography>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n )}\n </Box>\n )}\n </>\n )}\n\n {/* ======================================================== */}\n {/* TAB 2: AUDIT TRAIL & ROLLBACK HISTORY */}\n {/* ======================================================== */}\n {activeTab === 'audit' && (\n <Box\n padding={6}\n background=\"neutral0\"\n shadow=\"filterShadow\"\n hasRadius\n style={{ width: '100%', maxWidth: '100%', minWidth: 0, boxSizing: 'border-box' }}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" marginBottom={4}>\n <Box>\n <Typography variant=\"delta\" tag=\"h2\" fontWeight=\"semiBold\">\n Audit Trail &amp; Version History\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n Deterministic record of all batch updates, timestamps, admin authorship, and one-click rollback.\n </Typography>\n </Box>\n <Button\n variant=\"tertiary\"\n size=\"S\"\n startIcon={<ArrowClockwise />}\n onClick={() => {\n fetchAuditHistory();\n fetchPendingBatches();\n }}\n loading={auditLoading || pendingBatchesLoading}\n >\n Refresh History\n </Button>\n </Flex>\n\n {/* Pending Approvals & Queued Batches Section */}\n <Box marginBottom={6} padding={5} background=\"neutral100\" hasRadius style={{ border: '1px solid #e6e6ef' }}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" marginBottom={3}>\n <Box>\n <Flex gap={2} alignItems=\"center\">\n <Typography variant=\"epsilon\" fontWeight=\"bold\">\n Pending Approvals &amp; Queued Batches\n </Typography>\n {pendingBatches.filter((b) => b.status === 'pending_approval' || b.status === 'queued_offpeak').length > 0 && (\n <Badge backgroundColor=\"warning100\" textColor=\"warning700\">\n {pendingBatches.filter((b) => b.status === 'pending_approval' || b.status === 'queued_offpeak').length} Action Required\n </Badge>\n )}\n </Flex>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n Four-Eyes Maker-Checker authorization queue and off-peak scheduled maintenance batches.\n </Typography>\n </Box>\n <Button\n variant=\"tertiary\"\n size=\"S\"\n startIcon={<ArrowClockwise />}\n onClick={fetchPendingBatches}\n loading={pendingBatchesLoading}\n >\n Refresh Queue\n </Button>\n </Flex>\n\n {pendingBatches.length === 0 ? (\n <Box padding={4} background=\"neutral0\" hasRadius style={{ textAlign: 'center' }}>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n No batches pending approval or queued for off-peak execution.\n </Typography>\n </Box>\n ) : (\n <Box className=\"bulk-updater-table-container\" style={{ width: '100%', maxWidth: '100%', minWidth: 0, overflowX: 'auto' }}>\n <Table colCount={6} rowCount={pendingBatches.length + 1} style={{ width: '100%' }}>\n <Thead>\n <Tr>\n <Th style={{ minWidth: 160 }}><Typography variant=\"sigma\">Batch ID &amp; Created</Typography></Th>\n <Th style={{ minWidth: 130 }}><Typography variant=\"sigma\">Maker</Typography></Th>\n <Th style={{ minWidth: 200 }}><Typography variant=\"sigma\">Target Details</Typography></Th>\n <Th style={{ minWidth: 150 }}><Typography variant=\"sigma\">Status</Typography></Th>\n <Th style={{ minWidth: 180 }}><Typography variant=\"sigma\">Notes</Typography></Th>\n <Th style={{ minWidth: 180, textAlign: 'right' }}><Typography variant=\"sigma\">Actions</Typography></Th>\n </Tr>\n </Thead>\n <Tbody>\n {pendingBatches.map((batch) => (\n <Tr key={batch.id}>\n <Td>\n <Typography fontWeight=\"bold\">{batch.id}</Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\" display=\"block\">\n {new Date(batch.createdAt).toLocaleString()}\n </Typography>\n </Td>\n <Td>\n <Typography variant=\"omega\">{batch.createdBy?.email || 'admin'}</Typography>\n </Td>\n <Td>\n <Typography variant=\"omega\" fontWeight=\"semiBold\">\n {batch.summary.attribute}: \"{formatDisplayValue(batch.summary.value)}\"\n </Typography>\n <Flex gap={1} alignItems=\"center\" marginTop={1}>\n <Badge\n backgroundColor={batch.summary.publishOnApproval === false ? 'warning100' : 'success100'}\n textColor={batch.summary.publishOnApproval === false ? 'warning700' : 'success700'}\n >\n {batch.summary.publishOnApproval === false ? 'DRAFT ONLY' : 'AUTO-PUBLISH'}\n </Badge>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n • {batch.summary.totalTargets} records across {Object.keys(batch.summary.collectionBreakdown || {}).length} collections\n </Typography>\n </Flex>\n </Td>\n <Td>\n {batch.status === 'pending_approval' && (\n <Badge backgroundColor=\"warning100\" textColor=\"warning700\">\n PENDING CHECKER APPROVAL\n </Badge>\n )}\n {batch.status === 'queued_offpeak' && (\n <Badge backgroundColor=\"primary100\" textColor=\"primary700\">\n QUEUED OFF-PEAK ({batch.scheduledFor || '18:00'})\n </Badge>\n )}\n {batch.status === 'approved' && (\n <Badge backgroundColor=\"success100\" textColor=\"success700\">\n APPROVED\n </Badge>\n )}\n {batch.status === 'rejected' && (\n <Badge backgroundColor=\"danger100\" textColor=\"danger700\">\n REJECTED\n </Badge>\n )}\n {batch.status === 'executed' && (\n <Badge backgroundColor=\"neutral200\" textColor=\"neutral700\">\n EXECUTED\n </Badge>\n )}\n </Td>\n <Td>\n <Typography variant=\"pi\" textColor=\"neutral700\">\n {batch.makerNotes || '—'}\n {batch.approval?.rejectionReason && (\n <span style={{ color: '#d9534f', display: 'block' }}>\n Rejection Reason: {batch.approval.rejectionReason}\n </span>\n )}\n </Typography>\n </Td>\n <Td style={{ textAlign: 'right' }}>\n <Flex gap={2} justifyContent=\"flex-end\">\n {batch.status === 'pending_approval' && (\n <>\n <Button\n size=\"S\"\n variant=\"success-light\"\n onClick={() => handleApproveBatch(batch.id)}\n loading={approvingBatchId === batch.id}\n >\n Approve &amp; Execute\n </Button>\n <Button\n size=\"S\"\n variant=\"danger-light\"\n onClick={() => handleRejectBatch(batch.id)}\n loading={rejectingBatchId === batch.id}\n >\n Reject\n </Button>\n </>\n )}\n {batch.status === 'queued_offpeak' && (\n <Button\n size=\"S\"\n variant=\"default\"\n onClick={() => handleExecuteNow(batch.id)}\n loading={executingNowBatchId === batch.id}\n >\n Run Now\n </Button>\n )}\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n </Box>\n )}\n </Box>\n\n {auditNotice && (\n <Alert variant=\"warning\" title=\"Audit Configuration Status\" marginBottom={4}>\n {auditNotice}\n </Alert>\n )}\n\n {auditHistory.length === 0 && !auditLoading && (\n <Box padding={8} background=\"neutral100\" hasRadius style={{ textAlign: 'center' }}>\n <Typography variant=\"beta\" textColor=\"neutral600\">\n No batch operations recorded in the audit trail yet.\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral500\" display=\"block\" marginTop={2}>\n When you execute a bulk update in the editor, its transactional diff will be logged here.\n </Typography>\n </Box>\n )}\n\n {auditHistory.length > 0 && (\n <Box className=\"bulk-updater-table-container\" style={{ width: '100%', maxWidth: '100%', minWidth: 0, overflowX: 'auto' }}>\n <Table colCount={6} rowCount={auditHistory.length + 1} style={{ width: '100%' }}>\n <Thead>\n <Tr>\n <Th style={{ minWidth: 140 }}>\n <Typography variant=\"sigma\">Date &amp; Time</Typography>\n </Th>\n <Th style={{ minWidth: 130 }}>\n <Typography variant=\"sigma\">Performed By</Typography>\n </Th>\n <Th style={{ minWidth: 160 }}>\n <Typography variant=\"sigma\">Attribute &amp; Value</Typography>\n </Th>\n <Th style={{ minWidth: 90 }}>\n <Typography variant=\"sigma\">Impact</Typography>\n </Th>\n <Th style={{ minWidth: 120 }}>\n <Typography variant=\"sigma\">Status</Typography>\n </Th>\n <Th style={{ minWidth: 160, textAlign: 'right' }}>\n <Typography variant=\"sigma\">Actions</Typography>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {auditHistory.map((rec) => {\n const isExpanded = expandedDiffBatchId === rec.batchId;\n const dateStr = new Date(rec.executedAt).toLocaleString();\n\n return (\n <React.Fragment key={rec.batchId}>\n <Tr\n style={{\n backgroundColor: rec.isRolledBack ? 'rgba(255, 255, 255, 0.04)' : undefined,\n opacity: rec.isRolledBack ? 0.85 : 1,\n }}\n >\n <Td style={{ minWidth: 140 }}>\n <Typography fontWeight=\"semiBold\">{dateStr}</Typography>\n <Typography variant=\"pi\" textColor=\"neutral500\" display=\"block\" style={{ wordBreak: 'break-all' }}>\n Batch ID: {rec.batchId}\n </Typography>\n </Td>\n <Td style={{ minWidth: 130 }}>\n <Typography fontWeight=\"semiBold\">{rec.userName}</Typography>\n <Typography variant=\"pi\" textColor=\"neutral500\" display=\"block\" style={{ wordBreak: 'break-all' }}>\n {rec.userEmail}\n </Typography>\n </Td>\n <Td style={{ minWidth: 160 }}>\n <Typography\n style={{\n display: 'inline-block',\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n title={`${rec.attribute} → \"${formatDisplayValue(rec.value)}\"`}\n >\n <strong>{rec.attribute}</strong> &rarr; &ldquo;{formatDisplayValue(rec.value)}&rdquo;\n </Typography>\n </Td>\n <Td style={{ minWidth: 90, whiteSpace: 'nowrap' }}>\n <Badge backgroundColor=\"success100\" textColor=\"success700\">\n {rec.updatedCount} updated\n </Badge>\n {rec.skippedCount > 0 && (\n <Badge backgroundColor=\"warning100\" textColor=\"warning700\" style={{ marginLeft: 6 }}>\n {rec.skippedCount} skipped\n </Badge>\n )}\n </Td>\n <Td style={{ minWidth: 120 }}>\n {rec.isRolledBack ? (\n <Box>\n <Badge backgroundColor=\"neutral200\" textColor=\"neutral700\">\n ROLLED BACK\n </Badge>\n {rec.rolledBackAt && (\n <Typography variant=\"pi\" textColor=\"neutral500\" display=\"block\" style={{ wordBreak: 'break-word', marginTop: 2 }}>\n {new Date(rec.rolledBackAt).toLocaleTimeString()} by {rec.rolledBackBy || 'Admin'}\n </Typography>\n )}\n </Box>\n ) : (\n <Badge backgroundColor=\"success100\" textColor=\"success700\">\n ACTIVE (APPLIED)\n </Badge>\n )}\n </Td>\n <Td style={{ minWidth: 160, textAlign: 'right', whiteSpace: 'nowrap' }}>\n <Flex gap={2} justifyContent=\"flex-end\">\n <Button\n variant=\"tertiary\"\n size=\"S\"\n onClick={() =>\n setExpandedDiffBatchId(isExpanded ? null : rec.batchId)\n }\n >\n {isExpanded ? 'Hide Diffs' : 'View Diffs'}\n </Button>\n {!rec.isRolledBack && (\n <Button\n variant=\"danger\"\n size=\"S\"\n loading={rollingBackBatchId === rec.batchId}\n onClick={() => handleRollback(rec.batchId)}\n >\n Rollback\n </Button>\n )}\n </Flex>\n </Td>\n </Tr>\n\n {/* Expandable Diffs Breakdown */}\n {isExpanded && (\n <Tr>\n <Td colSpan={6} style={{ background: 'rgba(0, 0, 0, 0.06)', padding: 16 }}>\n <Box\n className=\"bulk-updater-table-container\"\n padding={3}\n background=\"neutral0\"\n hasRadius\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n borderColor=\"neutral200\"\n style={{ width: '100%', maxWidth: '100%', minWidth: 0, overflowX: 'auto' }}\n >\n <Typography variant=\"delta\" fontWeight=\"bold\" marginBottom={2}>\n Detailed Before/After Snapshots for Batch {rec.batchId}:\n </Typography>\n <Table colCount={4} rowCount={rec.diffs.length + 1}>\n <Thead>\n <Tr>\n <Th><Typography variant=\"sigma\">Collection</Typography></Th>\n <Th><Typography variant=\"sigma\">Document / Entry</Typography></Th>\n <Th><Typography variant=\"sigma\">Previous Value</Typography></Th>\n <Th><Typography variant=\"sigma\">Applied Value</Typography></Th>\n </Tr>\n </Thead>\n <Tbody>\n {rec.diffs.map((d, dIdx) => (\n <Tr key={dIdx}>\n <Td><Typography fontWeight=\"semiBold\">{d.collectionName}</Typography></Td>\n <Td><Typography>{d.label}</Typography></Td>\n <Td><Typography textColor=\"danger600\">{formatDisplayValue(d.oldValue)}</Typography></Td>\n <Td><Typography textColor=\"success600\">{formatDisplayValue(d.newValue)}</Typography></Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n </Box>\n </Td>\n </Tr>\n )}\n </React.Fragment>\n );\n })}\n </Tbody>\n </Table>\n </Box>\n )}\n </Box>\n )}\n\n {/* Confirmation Modal */}\n {showConfirmModal && (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(20, 20, 30, 0.65)',\n backdropFilter: 'blur(2px)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n padding: 16,\n boxSizing: 'border-box',\n overflowY: 'auto',\n }}\n onClick={() => setShowConfirmModal(false)}\n >\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"popupShadow\"\n style={{\n maxWidth: 680,\n width: '100%',\n maxHeight: 'calc(100vh - 48px)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n position: 'relative',\n boxShadow: '0 24px 48px rgba(0, 0, 0, 0.32), 0 0 1px rgba(0, 0, 0, 0.2)',\n }}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n {/* Modal Header - Fixed Top */}\n <Box\n padding={5}\n background=\"neutral100\"\n style={{\n borderBottom: '1px solid rgba(120, 120, 150, 0.2)',\n flexShrink: 0,\n }}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box>\n <Typography variant=\"delta\" fontWeight=\"bold\">\n Confirm Bulk Update\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\" display=\"block\">\n Review target attributes, affected counts, and server execution policy before proceeding.\n </Typography>\n </Box>\n <Badge\n backgroundColor={license?.tier === 'enterprise' ? 'primary100' : 'neutral200'}\n textColor={license?.tier === 'enterprise' ? 'primary700' : 'neutral700'}\n >\n {license?.tier === 'enterprise' ? 'ENTERPRISE 4-EYES' : 'STANDARD'}\n </Badge>\n </Flex>\n </Box>\n\n {/* Modal Body - Smooth Scrollable Middle */}\n <Box\n padding={5}\n style={{\n flex: '1 1 auto',\n minHeight: 0,\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n }}\n >\n {/* Target Summary */}\n <Box padding={4} background=\"neutral100\" hasRadius marginBottom={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" marginBottom={2} display=\"block\">\n UPDATE DETAILS\n </Typography>\n <Flex direction=\"column\" gap={2}>\n <Flex justifyContent=\"space-between\">\n <Typography fontWeight=\"semiBold\">Target Attribute:</Typography>\n <Badge backgroundColor=\"primary100\" textColor=\"primary700\">\n {selectedAttribute}\n </Badge>\n </Flex>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Typography fontWeight=\"semiBold\">Target Value:</Typography>\n <Typography variant=\"omega\" style={{ wordBreak: 'break-all', maxWidth: 360 }}>\n {relationsMeta[selectedAttribute] ? (\n <span>\n {selectedRelationDocId === '__clear__' ? (\n <Badge backgroundColor=\"danger100\" textColor=\"danger700\">Clear / Unlink Relation</Badge>\n ) : (\n <Badge backgroundColor=\"secondary100\" textColor=\"secondary700\">\n {relationsMeta[selectedAttribute].isMulti ? `[${relationMode.toUpperCase()}] ` : ''}\n {relationOptions.find((o) => o.documentId === selectedRelationDocId)?.label || selectedRelationDocId || '(none selected)'}\n </Badge>\n )}\n </span>\n ) : useRegex ? (\n <span>\n Replace <code>/{regexPattern}/g</code> with <strong>\"{attributeValue}\"</strong>\n </span>\n ) : (\n <strong>\"{attributeValue || '(empty string)'}\"</strong>\n )}\n </Typography>\n </Flex>\n <Flex justifyContent=\"space-between\">\n <Typography fontWeight=\"semiBold\">Total Selected Records:</Typography>\n <Typography fontWeight=\"bold\" textColor=\"primary600\">\n {totalSelectedCount} records\n </Typography>\n </Flex>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Typography fontWeight=\"semiBold\">Publishing Mode:</Typography>\n <Badge\n backgroundColor={publishOnApproval ? 'success100' : 'warning100'}\n textColor={publishOnApproval ? 'success700' : 'warning700'}\n >\n {publishOnApproval ? 'Publish Immediately' : 'Keep as Draft'}\n </Badge>\n </Flex>\n </Flex>\n </Box>\n\n {/* Collections Breakdown */}\n <Box marginBottom={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" marginBottom={2} display=\"block\">\n COLLECTION BREAKDOWN\n </Typography>\n <Flex direction=\"column\" gap={1}>\n {Object.entries(getSelectedBreakdown()).map(([name, count]) => (\n <Flex\n key={name}\n justifyContent=\"space-between\"\n padding={2}\n background=\"neutral100\"\n hasRadius\n style={{ border: '1px solid rgba(120, 120, 150, 0.15)' }}\n >\n <Typography variant=\"omega\">{name}</Typography>\n <Badge backgroundColor=\"neutral200\" textColor=\"neutral800\">\n {count} {count === 1 ? 'record' : 'records'}\n </Badge>\n </Flex>\n ))}\n </Flex>\n </Box>\n\n {/* Developer Server Execution Window Policy */}\n <Box padding={4} hasRadius marginBottom={4} background={executionWindow?.isBusinessHours ? 'warning100' : 'success100'}>\n <Flex direction=\"column\" gap={1}>\n <Flex gap={2} alignItems=\"center\">\n <Typography fontWeight=\"bold\" textColor={executionWindow?.isBusinessHours ? 'warning700' : 'success700'}>\n {executionWindow?.isBusinessHours ? '⏰ Peak Business Hours Restriction Active' : '✅ Server Off-Peak Window Active'}\n </Typography>\n </Flex>\n <Typography variant=\"pi\" textColor={executionWindow?.isBusinessHours ? 'warning700' : 'success700'}>\n {executionWindow?.policyMessage || (executionWindow?.isBusinessHours\n ? 'Server policy restricts bulk updates during peak business hours (09:00 - 18:00). Direct execution is paused to preserve API throughput.'\n : 'Currently outside peak business hours. Direct execution is permitted.')}\n </Typography>\n </Flex>\n </Box>\n\n {/* Publish Immediately vs Keep as Draft Option */}\n <Box\n padding={4}\n background=\"neutral100\"\n hasRadius\n marginBottom={4}\n style={{ border: '1px solid rgba(120, 120, 150, 0.15)' }}\n >\n <Flex gap={3} alignItems=\"flex-start\">\n <Checkbox\n name=\"publishOnApproval\"\n checked={publishOnApproval}\n onCheckedChange={(checked: boolean) => setPublishOnApproval(Boolean(checked))}\n />\n <Box style={{ cursor: 'pointer' }} onClick={() => setPublishOnApproval(!publishOnApproval)}>\n <Typography fontWeight=\"bold\" display=\"block\">\n Publish immediately upon checker approval / execution\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n When checked (default), content types with Draft &amp; Publish enabled will have their updated documents published immediately upon execution. When unchecked, changes remain in Draft for further editorial review.\n </Typography>\n </Box>\n </Flex>\n </Box>\n\n {/* Notes / Release Ticket (Maker Notes) */}\n <Box marginBottom={2}>\n <TextInput\n label=\"Change Request / Release Notes (Optional)\"\n name=\"makerNotes\"\n placeholder=\"e.g. REL-4021: Updating summer pricing & promo attributes\"\n value={makerNotesInput}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setMakerNotesInput(e.target.value)}\n />\n </Box>\n </Box>\n\n {/* Modal Footer - Fixed Sticky Bottom CTAs */}\n <Box\n padding={4}\n background=\"neutral100\"\n style={{\n borderTop: '1px solid rgba(120, 120, 150, 0.2)',\n flexShrink: 0,\n position: 'sticky',\n bottom: 0,\n zIndex: 20,\n boxShadow: '0 -4px 16px rgba(0, 0, 0, 0.08)',\n }}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap={3} style={{ width: '100%' }}>\n <Button variant=\"tertiary\" size=\"M\" onClick={() => setShowConfirmModal(false)}>\n Cancel\n </Button>\n <Flex gap={2} wrap=\"wrap\" justifyContent=\"flex-end\" alignItems=\"center\">\n {/* Enterprise Maker-Checker Button */}\n {(license?.tier === 'enterprise' || license?.features?.includes('Maker-Checker Approval Workflow (4-Eyes Principle)')) && (\n <Button\n variant={executionWindow?.isBusinessHours ? 'default' : 'secondary'}\n size=\"M\"\n onClick={() => executeBatchWithMode('maker_checker')}\n loading={updating}\n >\n Submit for Checker Approval\n </Button>\n )}\n\n {/* Scheduled Off-Peak Queue or Immediate Button */}\n {executionWindow?.isBusinessHours ? (\n <>\n <Button\n variant={license?.tier === 'enterprise' ? 'secondary' : 'default'}\n size=\"M\"\n onClick={() => executeBatchWithMode('queue_offpeak')}\n loading={updating}\n >\n Queue for Off-Peak ({executionWindow?.offPeakStartTime || '18:00'})\n </Button>\n <Button\n variant=\"danger-light\"\n size=\"S\"\n onClick={() => executeBatchWithMode('immediate', true)}\n loading={updating}\n >\n Force Run Now\n </Button>\n </>\n ) : (\n <Button\n variant=\"default\"\n size=\"M\"\n onClick={() => executeBatchWithMode('immediate')}\n loading={updating}\n >\n Confirm &amp; Execute Now\n </Button>\n )}\n </Flex>\n </Flex>\n </Box>\n </Box>\n </div>\n )}\n </Box>\n );\n};\n\nexport default BulkUpdater;\n"],"names":["jsx","Th","Typography","jsxs","Flex","Checkbox","Box","Badge","useFetchClient","useNotification","useState","useEffect","React","Button","ArrowClockwise","Fragment","SingleSelect","SingleSelectOption","TextInput","Play","Table","Thead","Tr","Tbody","Td","Alert"],"mappings":"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"}