+
+
+ {CONTENT_TYPES.map((contentType) => {
+ const mode = defaultModes[contentType];
+ const isOverridden = Boolean(defaultModeOverrides?.[contentType]);
+ const isDisabled = Boolean(defaultModeDisabled?.[contentType]);
+
+ const mobileLabel = (
+
+ {contentType === 'ebook' ? 'Ebook:' : 'Audiobook:'}
+
+ );
+
+ return (
+
+ {mobileLabel}
+ {isDisabled ? (
+
+ {REQUEST_POLICY_MODE_LABELS[mode]}
+
+ ) : (
+
+
+ onDefaultModeChange(
+ contentType,
+ (Array.isArray(value) ? value[0] : value) as RequestPolicyMode
+ )
+ }
+ widthClassName="w-full"
+ />
+
+ )}
+ {isOverridden && onDefaultModeReset && (
+
+ )}
+
+ );
+ })}
+
+
+ {/* Source rows */}
+ {hasConfigurableColumn ? (
+ sourceRows.map((sourceRow, index) => (
+
0 ? 'border-t border-[var(--border-muted)]' : ''
+ }`}
+ >
+
+
{sourceRow.displayName}
+
+
+ {CONTENT_TYPES.map((contentType) => {
+ const key = toRuleKey(sourceRow.source, contentType);
+ const isSupported = sourceRow.supportedContentTypes.includes(contentType);
+ const defaultMode = defaultModes[contentType];
+ const isConfigurable = isMatrixConfigurable(defaultMode);
+ const effectiveMode = getEffectiveCellMode(
+ sourceRow.source,
+ contentType,
+ defaultModes,
+ baseRules,
+ normalizedExplicitRules
+ );
+ const explicitRule = explicitRuleMap.get(key);
+ const isOverridden = Boolean(explicitRule);
+
+ const mobileLabel = (
+
+ {contentType === 'ebook' ? 'Ebook:' : 'Audiobook:'}
+
+ );
+
+ if (!isSupported) {
+ return (
+
+ {mobileLabel}
+ Not supported
+
+ );
+ }
+
+ if (!isConfigurable) {
+ return (
+
+ {mobileLabel}
+
+ {REQUEST_POLICY_MODE_LABELS[effectiveMode]}
+
+
+ );
+ }
+
+ const allowedModes = getAllowedMatrixModes(defaultMode);
+ // When the effective mode isn't an allowed matrix mode (e.g. request_book
+ // as a ceiling default), include it as the first option so the dropdown
+ // shows the current state and lets the user switch away from it.
+ const effectiveModeOption =
+ !allowedModes.includes(effectiveMode as typeof allowedModes[number])
+ ? [{ value: effectiveMode, label: REQUEST_POLICY_MODE_LABELS[effectiveMode], description: modeDescriptions[effectiveMode] }]
+ : [];
+ const options = [
+ ...effectiveModeOption,
+ ...allowedModes.map((mode) => ({
+ value: mode,
+ label: REQUEST_POLICY_MODE_LABELS[mode],
+ description: modeDescriptions[mode],
+ })),
+ ];
+
+ return (
+
+ {mobileLabel}
+
+ {rulesDisabled ? (
+
+ {REQUEST_POLICY_MODE_LABELS[effectiveMode]}
+
+ ) : (
+
{
+ const nextMode = (Array.isArray(value) ? value[0] : value) as RequestPolicyMode;
+ updateCellRule(sourceRow.source, contentType, nextMode);
+ }}
+ widthClassName="w-full"
+ />
+ )}
+
+ {isOverridden && !rulesDisabled && (
+
+ )}
+
+ );
+ })}
+