computer-scienceangular-roadmapbackend-roadmapblockchain-roadmapdba-roadmapdeveloper-roadmapdevops-roadmapfrontend-roadmapgo-roadmaphactoberfestjava-roadmapjavascript-roadmapnodejs-roadmappython-roadmapqa-roadmapreact-roadmaproadmapstudy-planvue-roadmapweb3-roadmap
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
4.0 KiB
114 lines
4.0 KiB
import { HelpCircle } from 'lucide-react'; |
|
import { cn } from '../../lib/classname'; |
|
import type { ResourceType } from '../../lib/resource-progress'; |
|
import { useState } from 'react'; |
|
import { useStore } from '@nanostores/react'; |
|
import { canManageCurrentRoadmap, currentRoadmap } from '../../stores/roadmap'; |
|
import { ShareOptionsModal } from '../ShareOptions/ShareOptionsModal'; |
|
|
|
type ResourceProgressStatsProps = { |
|
resourceId: string; |
|
resourceType: ResourceType; |
|
isSecondaryBanner?: boolean; |
|
}; |
|
|
|
export function ResourceProgressStats(props: ResourceProgressStatsProps) { |
|
const { isSecondaryBanner = false } = props; |
|
|
|
const [isSharing, setIsSharing] = useState(false); |
|
|
|
const $canManageCurrentRoadmap = useStore(canManageCurrentRoadmap); |
|
const $currentRoadmap = useStore(currentRoadmap); |
|
|
|
return ( |
|
<> |
|
{isSharing && $canManageCurrentRoadmap && $currentRoadmap && ( |
|
<ShareOptionsModal |
|
roadmapSlug={$currentRoadmap?.slug} |
|
isDiscoverable={$currentRoadmap.isDiscoverable} |
|
description={$currentRoadmap?.description} |
|
visibility={$currentRoadmap?.visibility} |
|
teamId={$currentRoadmap?.teamId} |
|
roadmapId={$currentRoadmap?._id!} |
|
sharedFriendIds={$currentRoadmap?.sharedFriendIds || []} |
|
sharedTeamMemberIds={$currentRoadmap?.sharedTeamMemberIds || []} |
|
onClose={() => setIsSharing(false)} |
|
onShareSettingsUpdate={(settings) => { |
|
currentRoadmap.set({ |
|
...$currentRoadmap, |
|
...settings, |
|
}); |
|
}} |
|
/> |
|
)} |
|
<div |
|
data-progress-nums-container="" |
|
className={cn( |
|
'striped-loader relative z-50 hidden items-center justify-between bg-white px-2 py-1.5 sm:flex', |
|
{ |
|
'rounded-bl-md rounded-br-md': isSecondaryBanner, |
|
'rounded-md': !isSecondaryBanner, |
|
}, |
|
)} |
|
> |
|
<p |
|
className="flex text-sm opacity-0 transition-opacity duration-300" |
|
data-progress-nums="" |
|
> |
|
<span className="mr-2.5 rounded-sm bg-yellow-200 px-1 py-0.5 text-xs font-medium uppercase text-yellow-900"> |
|
<span data-progress-percentage="">0</span>% Done |
|
</span> |
|
|
|
<span className="itesm-center hidden md:flex"> |
|
<span> |
|
<span data-progress-done="">0</span> completed |
|
</span> |
|
<span className="mx-1.5 text-gray-400">·</span> |
|
<span> |
|
<span data-progress-learning="">0</span> in progress |
|
</span> |
|
<span className="mx-1.5 text-gray-400">·</span> |
|
<span> |
|
<span data-progress-skipped="">0</span> skipped |
|
</span> |
|
<span className="mx-1.5 text-gray-400">·</span> |
|
<span> |
|
<span data-progress-total="">0</span> Total |
|
</span> |
|
</span> |
|
<span className="md:hidden"> |
|
<span data-progress-done="">0</span> of{' '} |
|
<span data-progress-total="">0</span> Done |
|
</span> |
|
</p> |
|
|
|
<div |
|
className="flex items-center gap-3 opacity-0 transition-opacity duration-300" |
|
data-progress-nums="" |
|
> |
|
<button |
|
data-popup="progress-help" |
|
className="flex items-center gap-1 text-sm font-medium text-gray-500 opacity-0 transition-opacity hover:text-black" |
|
data-progress-nums="" |
|
> |
|
<HelpCircle className="h-3.5 w-3.5 stroke-[2.5px]" /> |
|
Track Progress |
|
</button> |
|
</div> |
|
</div> |
|
|
|
<div |
|
data-progress-nums-container="" |
|
className="striped-loader relative -mb-2 flex items-center justify-between rounded-md border bg-white px-2 py-1.5 text-sm text-gray-700 sm:hidden" |
|
> |
|
<span |
|
data-progress-nums="" |
|
className="text-gray-500 opacity-0 transition-opacity duration-300" |
|
> |
|
<span data-progress-done="">0</span> of{' '} |
|
<span data-progress-total="">0</span> Done |
|
</span> |
|
</div> |
|
</> |
|
); |
|
}
|
|
|