Add iOS roadmap

pull/5753/head
Kamran Ahmed 6 months ago
parent a3999d04dd
commit bb848de581
  1. 37
      src/components/TopicDetail/TopicDetail.tsx
  2. 1
      src/data/roadmaps/ios/content/accessibility-inspector@h34LaYQ3JYN2AZPMDqpmO.md
  3. 1
      src/data/roadmaps/ios/content/accessibility@1DZYPqvgY6GtwMCS7N2y-.md
  4. 1
      src/data/roadmaps/ios/content/alamofire@nJeBisdKtN43ntkXnPCVF.md
  5. 1
      src/data/roadmaps/ios/content/app-store-distribution@iZAXQKLe2LaIIifVFtFOL.md
  6. 1
      src/data/roadmaps/ios/content/app-store-optimization-aso@jZpH-T2hW-XBdprVqemGi.md
  7. 1
      src/data/roadmaps/ios/content/architectural-patterns@ajPGMwoaFb1UFWTtpi5kd.md
  8. 1
      src/data/roadmaps/ios/content/arkit@k3uHcF0CsyHr6PK95UwR1.md
  9. 1
      src/data/roadmaps/ios/content/async--await-in-swift@3GtrUXvLgvXK3G8cXRb-P.md
  10. 1
      src/data/roadmaps/ios/content/async--await@ysaBCl_TtWqelirptQp7P.md
  11. 1
      src/data/roadmaps/ios/content/auto-layout@j2BL0sf3WjnJZZWa7cCjy.md
  12. 1
      src/data/roadmaps/ios/content/av-foundation@UKgiSQvR9cryQT50t7riZ.md
  13. 1
      src/data/roadmaps/ios/content/azure@r3fNx1Hk_TGlQSDtRnXqF.md
  14. 1
      src/data/roadmaps/ios/content/basic-interfaces@0o3V_zveN1xCIt7rayrCF.md
  15. 1
      src/data/roadmaps/ios/content/basics--creating-animations@w0i5Dxp40XS2HnF5nXeZI.md
  16. 1
      src/data/roadmaps/ios/content/benefits-over-objective-c@ZkNulHQAqhiFTO3CRC_mW.md
  17. 1
      src/data/roadmaps/ios/content/breakpoints@X0QavvwPVJU6sulafPVUK.md
  18. 1
      src/data/roadmaps/ios/content/building-interfaces@YvuYJceeNNfLBpq2-3iiL.md
  19. 1
      src/data/roadmaps/ios/content/callback-hell@WhOpzFvv21QQV3aS6XbXr.md
  20. 1
      src/data/roadmaps/ios/content/callbacks@qJEd7KU52xL_GRG3IQqhM.md
  21. 1
      src/data/roadmaps/ios/content/capturing-values--memory-mgmt@S-D-PnHA7COd2Dp6U2XO4.md
  22. 1
      src/data/roadmaps/ios/content/carthage@tIHjjNTXJWcNgkO6TB9ea.md
  23. 1
      src/data/roadmaps/ios/content/ci--cd@U4xE1enkZxUME0j0gutae.md
  24. 1
      src/data/roadmaps/ios/content/circle-ci@tWxuFh0xDugdplnHt_G0e.md
  25. 1
      src/data/roadmaps/ios/content/closures@M9UlalPL47GoqhcyGsAPV.md
  26. 1
      src/data/roadmaps/ios/content/cocoa-touch@leozxW-5fAOfkKbQM4FD1.md
  27. 1
      src/data/roadmaps/ios/content/cocoapods@epr1sOEZIAOwlgb8bre7r.md
  28. 1
      src/data/roadmaps/ios/content/code-quality-tools@DVe8S6TjKcQ8LT5G-aMVa.md
  29. 1
      src/data/roadmaps/ios/content/combine-and-mvvm@pY_zaMcFpeFDLgVk2W0Vy.md
  30. 1
      src/data/roadmaps/ios/content/combine@UzpdLLPs226N00c6weWRv.md
  31. 1
      src/data/roadmaps/ios/content/components@A1TFKVjGU5RbeTF_zxJlu.md
  32. 1
      src/data/roadmaps/ios/content/components@xkH7Llut6uP2-8iTMw76F.md
  33. 1
      src/data/roadmaps/ios/content/concurrency-and-multithreading@fbloF-u4XwdHLmBS9flZm.md
  34. 1
      src/data/roadmaps/ios/content/concurrency-gcd-asyncawait@aALIiAxKz4f7B_EYyhBCi.md
  35. 1
      src/data/roadmaps/ios/content/concurrency@-aLGB3cDXZHIhVU3t-Ve4.md
  36. 1
      src/data/roadmaps/ios/content/core-animation@KpcmuLWX0xAjz6ty4ebtB.md
  37. 1
      src/data/roadmaps/ios/content/core-animation@_mRs6ctH0IsSSi-cwV2b8.md
  38. 1
      src/data/roadmaps/ios/content/core-audio@4bAABCfTvxchS5C5NlAro.md
  39. 1
      src/data/roadmaps/ios/content/core-data@H4-Dp2WTA6HAZiFRQdLjx.md
  40. 1
      src/data/roadmaps/ios/content/core-graphics@kRE9xT3mT9Si4NwJr9yGi.md
  41. 1
      src/data/roadmaps/ios/content/core-image@6zE_M0_oVpwW0B9qFSRgP.md
  42. 1
      src/data/roadmaps/ios/content/core-ml@7s9Elv80TbZX_-NZpyutj.md
  43. 1
      src/data/roadmaps/ios/content/core-os@IdGdLNgJI3WmONEFsMq-d.md
  44. 1
      src/data/roadmaps/ios/content/core-programming-concepts@mk02yV7_XHkgp2xdNIxaU.md
  45. 1
      src/data/roadmaps/ios/content/core-services@LHM7gNgTtfn_QDW-oQskD.md
  46. 1
      src/data/roadmaps/ios/content/data-binding@yR94uHs0SiSScU4gPBzfr.md
  47. 1
      src/data/roadmaps/ios/content/data-persistence@6gfqFy3H6SLt06oJ1kt5A.md
  48. 1
      src/data/roadmaps/ios/content/debug-navigator@VuWUsg05WmOoP_RJ5AXJO.md
  49. 1
      src/data/roadmaps/ios/content/debugging-techniques@OZZ3UnWN2gFflbM_WaJ8H.md
  50. 1
      src/data/roadmaps/ios/content/declarative-syntax@QVg4_8EXeQBJbleryy8c1.md
  51. 1
      src/data/roadmaps/ios/content/delegate-pattern@BtPYKd7RedHOLRATDKkpg.md
  52. 1
      src/data/roadmaps/ios/content/dependency-manager@Tv8-WUcKiZMLHuunQwise.md
  53. 1
      src/data/roadmaps/ios/content/dynamic-library@Lrb4HZYrZU7SJlbedZp7U.md
  54. 1
      src/data/roadmaps/ios/content/dynamic-type@0nei6iwP4Pgi_j4vVi_Qt.md
  55. 1
      src/data/roadmaps/ios/content/editors@-4q7MFXaTmpR_39PTeWD8.md
  56. 1
      src/data/roadmaps/ios/content/error-handling@N5ojp6bqgH074MPKYjCHV.md
  57. 1
      src/data/roadmaps/ios/content/fastlane@_W3vb0b14FrWB2fH7DHC7.md
  58. 1
      src/data/roadmaps/ios/content/file-system@_bkRbqVXKNCnRvEFCM6mN.md
  59. 1
      src/data/roadmaps/ios/content/frameworks--library@pZVPsgvCpP3zUgBM4i0CF.md
  60. 1
      src/data/roadmaps/ios/content/frameworks@PdzCQXZIivw3zCYPtokJV.md
  61. 1
      src/data/roadmaps/ios/content/functional-programming@Pj-hqRZUmwx1WhmTbLoFD.md
  62. 1
      src/data/roadmaps/ios/content/gamekit@H5F9P5xeQiHhWhS6jEzp5.md
  63. 1
      src/data/roadmaps/ios/content/gcd@aROcI1RucAyu-gHn-tVnj.md
  64. 1
      src/data/roadmaps/ios/content/git@QifWR7WSJJTcTK2IfczxG.md
  65. 1
      src/data/roadmaps/ios/content/github-actions@LltERZaHsI-R_3O_3twpk.md
  66. 1
      src/data/roadmaps/ios/content/github@U_xXGSFF5iibQ4VkzPAWf.md
  67. 1
      src/data/roadmaps/ios/content/gitlab@VylaBSDAVFzveVfytI1Fz.md
  68. 1
      src/data/roadmaps/ios/content/graphql@9o7d3aN0YFfNNUeVoJrhs.md
  69. 1
      src/data/roadmaps/ios/content/groups@42sfiLKrVCcnMMjR7TFn1.md
  70. 1
      src/data/roadmaps/ios/content/healthkit@Jsu5f6QASpuvpky_W5q-O.md
  71. 1
      src/data/roadmaps/ios/content/hig@1I5eFKqFVBxWLAXfpgNXO.md
  72. 1
      src/data/roadmaps/ios/content/history-and-why-swift@z4-1Gc95JKYAn2RPFc7hw.md
  73. 1
      src/data/roadmaps/ios/content/http--https@GjY5qCU1rjB0D58qHQtAR.md
  74. 1
      src/data/roadmaps/ios/content/ibactions@FspN4yiBF9aEN7_SlXUe1.md
  75. 1
      src/data/roadmaps/ios/content/iboutlets@tuUuLInq0p-nhehe2AqPg.md
  76. 1
      src/data/roadmaps/ios/content/implementing-delegates@z3AUN9u7EEqeKOqvLxf7D.md
  77. 1
      src/data/roadmaps/ios/content/installing@R8LdFpfyS0MFYJuMLk8RG.md
  78. 1
      src/data/roadmaps/ios/content/interface-builder@iMzYd8KUFnk6zqr4KecgX.md
  79. 1
      src/data/roadmaps/ios/content/interface-overview@FwwqAchMC6qdnXbqg45he.md
  80. 1
      src/data/roadmaps/ios/content/interoperability-with-swift@IAPzuN51xvrZJ5TFB23Q9.md
  81. 1
      src/data/roadmaps/ios/content/ios-architecture@IduGSdUa2Fi7VFMLKgmsS.md
  82. 1
      src/data/roadmaps/ios/content/jenkins@TrblGyy81Oep2CBxoZkaf.md
  83. 1
      src/data/roadmaps/ios/content/json--xml@WYV4YG_sLvC4S5ptFFdrF.md
  84. 1
      src/data/roadmaps/ios/content/keeping-updated-with-wwdc@fOOQurIL1w3PwH5Mep9x1.md
  85. 1
      src/data/roadmaps/ios/content/keychain@8v_eP0j85TnB33XyYAzrT.md
  86. 1
      src/data/roadmaps/ios/content/latest-ios-sdk@SBlLNfyWzzhdFNtNtkLet.md
  87. 1
      src/data/roadmaps/ios/content/latest-swift-version@e7qVpQeu2iQL0c9MOMCVe.md
  88. 1
      src/data/roadmaps/ios/content/lottie@i-T6GTqS0FZ_Llt5v4SvR.md
  89. 1
      src/data/roadmaps/ios/content/mapkit@XOXsjaQ-YyuAMpVCqH8KG.md
  90. 1
      src/data/roadmaps/ios/content/media@nGCG74_Xp_Ngt0u7PZnZl.md
  91. 1
      src/data/roadmaps/ios/content/memory-management@tqbg8mBJfjuXacdMlIB_L.md
  92. 1
      src/data/roadmaps/ios/content/meta@5VguZoP4h40rTWkxWxaxU.md
  93. 1
      src/data/roadmaps/ios/content/modals-and-navigation@jb89kQxDhZND3vQo0EH7r.md
  94. 1
      src/data/roadmaps/ios/content/mvc@a-QDI7Ei-B5BRHbicFcfG.md
  95. 1
      src/data/roadmaps/ios/content/mvp@lVNrnUK6p4eifKRVSnOje.md
  96. 1
      src/data/roadmaps/ios/content/mvvm-c@iLT2jAkQg-Ex0zSLquNfl.md
  97. 1
      src/data/roadmaps/ios/content/mvvm@taTxZw2c3xS18JOwgkNHM.md
  98. 1
      src/data/roadmaps/ios/content/navigation-controllers-segues@tUbMr1pGlw4JwMuW311JJ.md
  99. 1
      src/data/roadmaps/ios/content/navigation-stacks@TLm70PlTI0K3Odn1iYxWX.md
  100. 1
      src/data/roadmaps/ios/content/navigation-stacks@mUMDZsgzCB6cs_K6pfUY1.md
  101. Some files were not shown because too many files have changed in this diff Show More

@ -23,7 +23,7 @@ import type {
} from '../CustomRoadmap/CustomRoadmap';
import { markdownToHtml, sanitizeMarkdown } from '../../lib/markdown';
import { cn } from '../../lib/classname';
import { Ban, FileText, X } from 'lucide-react';
import { Ban, FileText, HeartHandshake, X } from 'lucide-react';
import { getUrlParams } from '../../lib/browser';
import { Spinner } from '../ReactIcons/Spinner';
import { GitHubIcon } from '../ReactIcons/GitHubIcon.tsx';
@ -58,6 +58,7 @@ export function TopicDetail(props: TopicDetailProps) {
const [isContributing, setIsContributing] = useState(false);
const [error, setError] = useState('');
const [topicHtml, setTopicHtml] = useState('');
const [hasContent, setHasContent] = useState(false);
const [topicTitle, setTopicTitle] = useState('');
const [topicHtmlTitle, setTopicHtmlTitle] = useState('');
const [links, setLinks] = useState<RoadmapContentDocument['links']>([]);
@ -177,6 +178,9 @@ export function TopicDetail(props: TopicDetailProps) {
const titleElem: HTMLElement = topicDom.querySelector('h1')!;
const otherElems = topicDom.querySelectorAll('body > *:not(h1, div)');
setHasContent(otherElems.length > 0);
setContributionUrl(contributionUrl);
setHasEnoughLinks(links.length >= 3);
setTopicHtmlTitle(titleElem?.textContent || '');
@ -207,7 +211,6 @@ export function TopicDetail(props: TopicDetailProps) {
return null;
}
const hasContent = topicHtml?.length > 0 || links?.length > 0 || topicTitle;
const resourceTitleForSearch = resourceTitle
?.toLowerCase()
?.replace(/\s+?roadmap/gi, '');
@ -225,7 +228,7 @@ export function TopicDetail(props: TopicDetailProps) {
className="fixed right-0 top-0 z-40 flex h-screen w-full flex-col overflow-y-auto bg-white p-4 focus:outline-0 sm:max-w-[600px] sm:p-6"
>
{isLoading && (
<div className="flex w-full h-full items-center justify-center">
<div className="flex h-full w-full items-center justify-center">
<Spinner
outerFill="#d1d5db"
className="h-6 w-6 sm:h-8 sm:w-8"
@ -265,6 +268,7 @@ export function TopicDetail(props: TopicDetailProps) {
{/* Topic Content */}
{hasContent ? (
<>
<div className="prose prose-quoteless prose-h1:mb-2.5 prose-h1:mt-7 prose-h1:text-balance prose-h2:mb-3 prose-h2:mt-0 prose-h3:mb-[5px] prose-h3:mt-[10px] prose-p:mb-2 prose-p:mt-0 prose-blockquote:font-normal prose-blockquote:not-italic prose-blockquote:text-gray-700 prose-li:m-0 prose-li:mb-0.5">
{topicTitle && <h1>{topicTitle}</h1>}
<div
@ -272,7 +276,10 @@ export function TopicDetail(props: TopicDetailProps) {
dangerouslySetInnerHTML={{ __html: topicHtml }}
/>
</div>
</>
) : (
<>
{!canSubmitContribution && (
<div className="flex h-[calc(100%-38px)] flex-col items-center justify-center">
<FileText className="h-16 w-16 text-gray-300" />
<p className="mt-2 text-lg font-medium text-gray-500">
@ -280,6 +287,27 @@ export function TopicDetail(props: TopicDetailProps) {
</p>
</div>
)}
{canSubmitContribution && (
<div className="flex h-[calc(100%-38px)] flex-col items-center justify-center max-w-[400px] mx-auto text-center">
<HeartHandshake className="h-16 w-16 text-gray-300 mb-2" />
<p className="text-lg font-semibold text-gray-900">
Help us write this content
</p>
<p className="text-sm text-gray-500 mt-2 mb-3">
Write a brief introduction to this topic and submit a link to a good article, podcast, video, or any other self-vetted resource that helped you understand this topic better.
</p>
<a
href={contributionUrl}
target={'_blank'}
className="flex w-full items-center justify-center rounded-md bg-gray-800 p-2 text-sm text-white transition-colors hover:bg-black hover:text-white disabled:bg-green-200 disabled:text-black"
>
<GitHubIcon className="mr-2 inline-block h-4 w-4 text-white" />
Submit a Pull Request
</a>
</div>
)}
</>
)}
{links.length > 0 && (
<ul className="mt-6 space-y-1">
@ -313,8 +341,7 @@ export function TopicDetail(props: TopicDetailProps) {
<div className="mb-12 mt-3 border-t text-sm text-gray-400">
<div className="mb-4 mt-3">
<p className="">
Can't find what you're looking for? Try these pre-filled
search queries:
Find more resources using these pre-filled search queries:
</p>
<div className="mt-3 flex gap-2 text-gray-700">
<a

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save