Allow artworks to have one primary category and extra secondaries.
Keep artwork_category as membership, store a deterministic primary_category_id, and let upload plus studio pick up to five additional same-type categories without changing canonical URLs.
This commit is contained in:
@@ -28,6 +28,7 @@ import {
|
||||
getContentTypeValue,
|
||||
getProcessingTransparencyLabel,
|
||||
} from '../../lib/uploadUtils'
|
||||
import UploadReviewNotice from './UploadReviewNotice'
|
||||
import { validateMarkdownLiteContent } from '../../utils/contentValidation'
|
||||
|
||||
// ─── Wizard step config ───────────────────────────────────────────────────────
|
||||
@@ -55,6 +56,7 @@ function createInitialMetadata(initialGroupSlug = '', currentUserId = null, cont
|
||||
isMature: false,
|
||||
rightsAccepted: false,
|
||||
contentType: '',
|
||||
additionalCategoryIds: [],
|
||||
group: normalizedGroupSlug,
|
||||
primaryAuthorUserId: defaultPrimaryAuthor,
|
||||
contributorUserIds: [],
|
||||
@@ -116,6 +118,8 @@ export default function UploadWizard({
|
||||
contributorOptionsByGroup = {},
|
||||
initialGroupSlug = '',
|
||||
currentUserId = null,
|
||||
maxSecondaryCategories = 5,
|
||||
requiresUploadReview = false,
|
||||
}) {
|
||||
const [notices, setNotices] = useState([])
|
||||
// ── UI state ──────────────────────────────────────────────────────────────
|
||||
@@ -589,9 +593,18 @@ export default function UploadWizard({
|
||||
filteredCategoryTree={filteredCategoryTree}
|
||||
allRootCategoryOptions={allRootCategoryOptions}
|
||||
requiresSubCategory={requiresSubCategory}
|
||||
onContentTypeChange={(value) => setMeta({ contentType: value, rootCategoryId: '', subCategoryId: '' })}
|
||||
onRootCategoryChange={(rootId) => setMeta({ rootCategoryId: rootId, subCategoryId: '' })}
|
||||
onSubCategoryChange={(subId) => setMeta({ subCategoryId: subId })}
|
||||
maxSecondaryCategories={maxSecondaryCategories}
|
||||
onContentTypeChange={(value) => setMeta({ contentType: value, rootCategoryId: '', subCategoryId: '', additionalCategoryIds: [] })}
|
||||
onRootCategoryChange={(rootId) => setMeta({
|
||||
rootCategoryId: rootId,
|
||||
subCategoryId: '',
|
||||
additionalCategoryIds: (metadata.additionalCategoryIds || []).filter((id) => String(id) !== String(rootId)),
|
||||
})}
|
||||
onSubCategoryChange={(subId) => setMeta({
|
||||
subCategoryId: subId,
|
||||
additionalCategoryIds: (metadata.additionalCategoryIds || []).filter((id) => String(id) !== String(subId)),
|
||||
})}
|
||||
onAdditionalCategoriesChange={(ids) => setMeta({ additionalCategoryIds: ids })}
|
||||
groupOptions={groupOptions}
|
||||
currentContributorOptions={currentContributorOptions}
|
||||
onGroupChange={(groupSlug) => setMeta({ group: groupSlug })}
|
||||
@@ -743,6 +756,8 @@ export default function UploadWizard({
|
||||
</div>
|
||||
)}
|
||||
|
||||
<UploadReviewNotice visible={requiresUploadReview} />
|
||||
|
||||
{/* Restored draft banner */}
|
||||
{showRestoredBanner && (
|
||||
<div className="rounded-2xl border border-sky-300/20 bg-sky-500/10 px-4 py-3 text-sm text-sky-100 shadow-[0_14px_44px_rgba(14,165,233,0.10)]">
|
||||
|
||||
Reference in New Issue
Block a user