Merge branch 'main' of http://113.45.157.195:3003/insiinc/re-mooc
This commit is contained in:
commit
862f85083f
|
@ -35,6 +35,7 @@ const CategorySection = () => {
|
||||||
|
|
||||||
const handleMouseClick = useCallback((categoryId: string) => {
|
const handleMouseClick = useCallback((categoryId: string) => {
|
||||||
setSelectedTerms({
|
setSelectedTerms({
|
||||||
|
...selectedTerms,
|
||||||
[TaxonomySlug.CATEGORY]: [categoryId],
|
[TaxonomySlug.CATEGORY]: [categoryId],
|
||||||
});
|
});
|
||||||
navigate("/courses");
|
navigate("/courses");
|
||||||
|
|
|
@ -24,6 +24,7 @@ export default function FilterSection() {
|
||||||
<div key={index}>
|
<div key={index}>
|
||||||
<h3 className="text-lg font-medium mb-4">
|
<h3 className="text-lg font-medium mb-4">
|
||||||
{tax?.name}
|
{tax?.name}
|
||||||
|
{/* {JSON.stringify(items)} */}
|
||||||
</h3>
|
</h3>
|
||||||
<TermParentSelector
|
<TermParentSelector
|
||||||
value={items}
|
value={items}
|
||||||
|
|
|
@ -29,6 +29,7 @@ interface CourseDetailContextType {
|
||||||
setIsHeaderVisible: (visible: boolean) => void; // 新增
|
setIsHeaderVisible: (visible: boolean) => void; // 新增
|
||||||
canEdit?: boolean;
|
canEdit?: boolean;
|
||||||
userIsLearning?: boolean;
|
userIsLearning?: boolean;
|
||||||
|
setUserIsLearning:(learning: boolean) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface CourseFormProviderProps {
|
interface CourseFormProviderProps {
|
||||||
|
@ -56,9 +57,14 @@ export function CourseDetailProvider({
|
||||||
{ enabled: Boolean(editId) }
|
{ enabled: Boolean(editId) }
|
||||||
);
|
);
|
||||||
|
|
||||||
const userIsLearning = useMemo(() => {
|
// const userIsLearning = useMemo(() => {
|
||||||
return (course?.studentIds || []).includes(user?.id);
|
// return (course?.studentIds || []).includes(user?.id);
|
||||||
}, [user, course, isLoading]);
|
// }, [user, course, isLoading]);
|
||||||
|
const [userIsLearning, setUserIsLearning] = useState(false);
|
||||||
|
useEffect(()=>{
|
||||||
|
console.log(course?.studentIds,user?.id)
|
||||||
|
setUserIsLearning((course?.studentIds || []).includes(user?.id));
|
||||||
|
},[user, course, isLoading])
|
||||||
const canEdit = useMemo(() => {
|
const canEdit = useMemo(() => {
|
||||||
const isAuthor = isAuthenticated && user?.id === course?.authorId;
|
const isAuthor = isAuthenticated && user?.id === course?.authorId;
|
||||||
const isRoot = hasSomePermissions(RolePerms?.MANAGE_ANY_POST);
|
const isRoot = hasSomePermissions(RolePerms?.MANAGE_ANY_POST);
|
||||||
|
@ -121,6 +127,7 @@ export function CourseDetailProvider({
|
||||||
setIsHeaderVisible,
|
setIsHeaderVisible,
|
||||||
canEdit,
|
canEdit,
|
||||||
userIsLearning,
|
userIsLearning,
|
||||||
|
setUserIsLearning
|
||||||
}}>
|
}}>
|
||||||
{children}
|
{children}
|
||||||
</CourseDetailContext.Provider>
|
</CourseDetailContext.Provider>
|
||||||
|
|
|
@ -12,15 +12,17 @@ import {
|
||||||
EditTwoTone,
|
EditTwoTone,
|
||||||
LoginOutlined,
|
LoginOutlined,
|
||||||
} from "@ant-design/icons";
|
} from "@ant-design/icons";
|
||||||
|
import toast from "react-hot-toast";
|
||||||
|
|
||||||
export default function CourseOperationBtns() {
|
export default function CourseOperationBtns() {
|
||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
const { isAuthenticated, user, hasSomePermissions, hasEveryPermissions } =
|
const { isAuthenticated, user, hasSomePermissions, hasEveryPermissions } =
|
||||||
useAuth();
|
useAuth();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { course, canEdit, userIsLearning } = useContext(CourseDetailContext);
|
const { course, canEdit, userIsLearning, setUserIsLearning} = useContext(CourseDetailContext);
|
||||||
const { update } = useStaff();
|
const { update } = useStaff();
|
||||||
const [isHovered, setIsHovered] = useState(false);
|
const [isHovered, setIsHovered] = useState(false);
|
||||||
|
|
||||||
const toggleLearning = async () => {
|
const toggleLearning = async () => {
|
||||||
if (!userIsLearning) {
|
if (!userIsLearning) {
|
||||||
await update.mutateAsync({
|
await update.mutateAsync({
|
||||||
|
@ -31,7 +33,10 @@ export default function CourseOperationBtns() {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
setUserIsLearning(true)
|
||||||
|
toast.success("加入学习成功");
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
await update.mutateAsync({
|
await update.mutateAsync({
|
||||||
where: { id: user?.id },
|
where: { id: user?.id },
|
||||||
data: {
|
data: {
|
||||||
|
@ -42,6 +47,8 @@ export default function CourseOperationBtns() {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
toast.success("退出学习成功");
|
||||||
|
setUserIsLearning(false)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -37,7 +37,7 @@ export default function TermParentSelector({
|
||||||
<Checkbox.Group onChange={handleCheckboxChange}>
|
<Checkbox.Group onChange={handleCheckboxChange}>
|
||||||
{data?.map((category) => (
|
{data?.map((category) => (
|
||||||
<div className="w-full h-9 p-2 my-1">
|
<div className="w-full h-9 p-2 my-1">
|
||||||
<Checkbox className="text-base text-slate-700" key={category.id} value={category.id}>
|
<Checkbox checked={value?.includes(category.id)} className="text-base text-slate-700" key={category.id} value={category.id}>
|
||||||
{category.name}
|
{category.name}
|
||||||
</Checkbox>
|
</Checkbox>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue