mirror of
https://github.com/kamranahmedse/developer-roadmap.git
synced 2026-09-24 15:00:31 +08:00
* wip: custom roadmap renderer * wip: custom roadmap events * wip: roadmap content * wip: svg styles * wip: custom roadmap progress * Render progress * Shortcut progress * Progress Tracking styles * wip: edit and share button * fix: disabled the share button * wip: content links rendering * Fix progress share * Replace disabled with `canShare` * wip: show custom roadmaps * wip: users all roadmaps * fix: create roadmap api * chore: roadmap sidebar icon * wip: content links * Update links color * Create roadmap home * Create Roadmap button * Roadmap type * chore: share progress modal * wip: share roadmap * wip: change visibility * chore: custom roadmap progress in activity * wip: custom roadmap share progress * chore: friend's roadmap * wip: custom roadmap skeleton * chore: roadmap title * Restricted Page * fix: skeleton loading width * Fix create roadmap button * chore: remove user id * chore: pick roadmap and share * chore: open new tab on create roadmap * chore: change share title * chore: use team id from params * chore: team roadmap create modal * chore: create team roadmap * chore: custom roadmap modal * chore: placeholde roadmaps * chore: roadmap hint * chore: visibility label * chore: public roadmap * chore: empty screen * chore: team progress * chore: create roadmap responsive * chore: form error * chore: multi user history * wip: manage custom roadmap * chore: empty roadmap list * chore: custom roadmap visit * chore: shared roadmaps * chore: shared roadmaps * chore: empty screen and topic title * chore: show progress bar * Implement Error in topic details * Add Modal close button * fix: link groups * Refactor roadmap creation * Refactor roadmap creation * Refactor team creation * Refactor team roadmaps * Refactor team creation roadmap selection * Refactor * Refactor team roadmap loading * Refactor team roadmaps * Refactor team roadmaps listing * Refactor Account dropdown * Updates * Refactor Account dropdown * Fix Team name overflow * Change Icon color * Update team dropdown * Minor UI fixes * Fix minor UI * Flicker fix in team dropdown * Roadmap action dropdown with responsiveness * Team roadmaps listing * Update team settings * Team roadmaps listing * fix: remove visibility change * Update roadmap options modal * Add dummy renderer * Add renderer script * Add generate renderer script * Add generate renderer * wip: add share settings * Update * Update UI * Update Minor UI * Fix team issue * Update Personal roadmaps UI * Add Roadmap Secret * Update teams type * Rearrange sections * Change Secret name * Add action button on roadmap detail page --------- Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
77 lines
2.0 KiB
TypeScript
77 lines
2.0 KiB
TypeScript
import { useAuth } from '../../hooks/use-auth';
|
|
import { useCopyText } from '../../hooks/use-copy-text';
|
|
import type { ResourceType } from '../../lib/resource-progress';
|
|
import { CheckIcon } from '../ReactIcons/CheckIcon';
|
|
import { ShareIcon } from '../ReactIcons/ShareIcon';
|
|
import { cn } from '../../lib/classname';
|
|
|
|
type ProgressShareButtonProps = {
|
|
resourceId: string;
|
|
resourceType: ResourceType;
|
|
className?: string;
|
|
shareIconClassName?: string;
|
|
checkIconClassName?: string;
|
|
isCustomResource?: boolean;
|
|
};
|
|
export function ProgressShareButton(props: ProgressShareButtonProps) {
|
|
const {
|
|
resourceId,
|
|
resourceType,
|
|
className,
|
|
shareIconClassName,
|
|
checkIconClassName,
|
|
isCustomResource,
|
|
} = props;
|
|
|
|
const user = useAuth();
|
|
const { copyText, isCopied } = useCopyText();
|
|
|
|
function handleCopyLink() {
|
|
const isDev = import.meta.env.DEV;
|
|
const newUrl = new URL(
|
|
isDev ? 'http://localhost:3000' : 'https://roadmap.sh'
|
|
);
|
|
|
|
if (resourceType === 'roadmap' && !isCustomResource) {
|
|
newUrl.pathname = `/${resourceId}`;
|
|
} else if (resourceType === 'best-practice' && !isCustomResource) {
|
|
newUrl.pathname = `/best-practices/${resourceId}`;
|
|
} else {
|
|
newUrl.pathname = `/r`;
|
|
newUrl.searchParams.set('id', resourceId || '');
|
|
}
|
|
|
|
newUrl.searchParams.set('s', user?.id || '');
|
|
copyText(newUrl.toString());
|
|
}
|
|
|
|
if (!user) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<button
|
|
className={cn(
|
|
'flex items-center gap-1 text-sm font-medium disabled:cursor-not-allowed disabled:opacity-70',
|
|
isCopied ? 'text-green-500' : 'text-gray-500 hover:text-black',
|
|
className
|
|
)}
|
|
onClick={handleCopyLink}
|
|
>
|
|
{isCopied ? (
|
|
<>
|
|
<CheckIcon additionalClasses={`h-3.5 w-3.5 ${checkIconClassName}`} />{' '}
|
|
Link Copied
|
|
</>
|
|
) : (
|
|
<>
|
|
<ShareIcon
|
|
className={`h-3.5 w-3.5 stroke-[2.5px] ${shareIconClassName}`}
|
|
/>{' '}
|
|
Share Progress
|
|
</>
|
|
)}
|
|
</button>
|
|
);
|
|
}
|