mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
fix: ordering issues
This commit is contained in:
parent
4ab8f52b09
commit
4e7a06b74e
3 changed files with 10 additions and 21 deletions
|
|
@ -152,10 +152,10 @@ async def get_course_meta(
|
||||||
async def get_authors():
|
async def get_authors():
|
||||||
authors_statement = (
|
authors_statement = (
|
||||||
select(ResourceAuthor, User)
|
select(ResourceAuthor, User)
|
||||||
.join(User, ResourceAuthor.user_id == User.id)
|
.join(User, ResourceAuthor.user_id == User.id) # type: ignore
|
||||||
.where(ResourceAuthor.resource_uuid == course.course_uuid)
|
.where(ResourceAuthor.resource_uuid == course.course_uuid)
|
||||||
.order_by(
|
.order_by(
|
||||||
ResourceAuthor.id.asc()
|
ResourceAuthor.id.asc() # type: ignore
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return db_session.exec(authors_statement).all()
|
return db_session.exec(authors_statement).all()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from fastapi import HTTPException, Request
|
from fastapi import HTTPException, Request
|
||||||
from sqlmodel import Session, select
|
from sqlmodel import Session, select
|
||||||
from typing import Any, List
|
from typing import Any
|
||||||
from src.db.courses.courses import Course, CourseRead, AuthorWithRole
|
from src.db.courses.courses import Course, CourseRead, AuthorWithRole
|
||||||
from src.db.payments.payments_courses import PaymentsCourse
|
from src.db.payments.payments_courses import PaymentsCourse
|
||||||
from src.db.payments.payments_users import PaymentsUser, PaymentStatusEnum, ProviderSpecificData
|
from src.db.payments.payments_users import PaymentsUser, PaymentStatusEnum, ProviderSpecificData
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ function EditCourseContributors(props: EditCourseContributorsProps) {
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent align="end" className="w-[200px]">
|
<DropdownMenuContent align="end" className="w-[200px]">
|
||||||
{['CREATOR', 'CONTRIBUTOR', 'MAINTAINER', 'REPORTER'].map((role) => (
|
{['CONTRIBUTOR', 'MAINTAINER', 'REPORTER'].map((role) => (
|
||||||
<DropdownMenuItem
|
<DropdownMenuItem
|
||||||
key={role}
|
key={role}
|
||||||
onClick={() => updateContributor(contributor.user_id, { authorship: role as ContributorRole })}
|
onClick={() => updateContributor(contributor.user_id, { authorship: role as ContributorRole })}
|
||||||
|
|
@ -180,23 +180,12 @@ function EditCourseContributors(props: EditCourseContributorsProps) {
|
||||||
const sortContributors = (contributors: Contributor[] | undefined) => {
|
const sortContributors = (contributors: Contributor[] | undefined) => {
|
||||||
if (!contributors) return [];
|
if (!contributors) return [];
|
||||||
|
|
||||||
return [...contributors].sort((a, b) => {
|
// Find the creator and other contributors
|
||||||
// First sort by role priority
|
const creator = contributors.find(c => c.authorship === 'CREATOR');
|
||||||
const rolePriority: Record<ContributorRole, number> = {
|
const otherContributors = contributors.filter(c => c.authorship !== 'CREATOR');
|
||||||
'CREATOR': 0,
|
|
||||||
'MAINTAINER': 1,
|
// Return array with creator at the top, followed by other contributors in their original order
|
||||||
'CONTRIBUTOR': 2,
|
return creator ? [creator, ...otherContributors] : otherContributors;
|
||||||
'REPORTER': 3
|
|
||||||
};
|
|
||||||
|
|
||||||
const roleDiff = rolePriority[a.authorship] - rolePriority[b.authorship];
|
|
||||||
if (roleDiff !== 0) return roleDiff;
|
|
||||||
|
|
||||||
// Then sort by name
|
|
||||||
const nameA = `${a.user.first_name} ${a.user.last_name}`.toLowerCase();
|
|
||||||
const nameB = `${b.user.first_name} ${b.user.last_name}`.toLowerCase();
|
|
||||||
return nameA.localeCompare(nameB);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue