chore(): revert challenge object change

This commit is contained in:
Eduardo Roth
2023-12-20 09:59:52 -06:00
parent f78daf3717
commit f1c160d8b3
59 changed files with 66 additions and 140 deletions

View File

@@ -4,11 +4,11 @@ import VideoButton from './VideoButton.astro'
import ClipboardCopy from './ClipboardCopy.astro' import ClipboardCopy from './ClipboardCopy.astro'
const { labels } = Astro.props; const { labels } = Astro.props;
const {author, challenge, title, blogLink, videoLink, command} = Astro.props.entry.data; const {author, challengeNumber, title, blogLink, videoLink, command} = Astro.props.entry.data;
const authorLink = `https://github.com/tomalaforge/angular-challenges/pulls?q=label%3A${challenge?.number}+label%3A"answer+author"`; const authorLink = `https://github.com/tomalaforge/angular-challenges/pulls?q=label%3A${challengeNumber}+label%3A"answer+author"`;
const authorDescription = `${title} solution author`; const authorDescription = `${title} solution author`;
const communityLink = `https://github.com/tomalaforge/angular-challenges/pulls?q=label%3A${challenge?.number}+label%3Aanswer`; const communityLink = `https://github.com/tomalaforge/angular-challenges/pulls?q=label%3A${challengeNumber}+label%3Aanswer`;
const communityDescription = `${title} community solutions`; const communityDescription = `${title} community solutions`;
const npxCommand = `npx nx serve ${command}`; const npxCommand = `npx nx serve ${command}`;
--- ---
@@ -25,7 +25,7 @@ const npxCommand = `npx nx serve ${command}`;
<aside aria-label="Reminder" class="starlight-aside starlight-aside--tip"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.43909 8.85483L1.44039 8.85354L4.96668 5.33815C5.30653 4.99386 5.7685 4.79662 6.2524 4.78972L6.26553 4.78963L12.9014 4.78962L13.8479 3.84308C16.9187 0.772319 20.0546 0.770617 21.4678 0.975145C21.8617 1.02914 22.2271 1.21053 22.5083 1.4917C22.7894 1.77284 22.9708 2.13821 23.0248 2.53199C23.2294 3.94517 23.2278 7.08119 20.1569 10.1521L19.2107 11.0983V17.7338L19.2106 17.7469C19.2037 18.2308 19.0067 18.6933 18.6624 19.0331L15.1456 22.5608C14.9095 22.7966 14.6137 22.964 14.29 23.0449C13.9663 23.1259 13.6267 23.1174 13.3074 23.0204C12.9881 22.9235 12.7011 22.7417 12.4771 22.4944C12.2533 22.2473 12.1006 21.9441 12.0355 21.6171L11.1783 17.3417L6.65869 12.822L4.34847 12.3589L2.38351 11.965C2.05664 11.8998 1.75272 11.747 1.50564 11.5232C1.25835 11.2992 1.07653 11.0122 0.979561 10.6929C0.882595 10.3736 0.874125 10.034 0.955057 9.7103C1.03599 9.38659 1.20328 9.09092 1.43909 8.85483ZM6.8186 10.8724L2.94619 10.096L6.32006 6.73268H10.9583L6.8186 10.8724ZM15.2219 5.21703C17.681 2.75787 20.0783 2.75376 21.1124 2.8876C21.2462 3.92172 21.2421 6.31895 18.783 8.77812L12.0728 15.4883L8.51172 11.9272L15.2219 5.21703ZM13.9042 21.0538L13.1279 17.1811L17.2676 13.0414V17.68L13.9042 21.0538Z"></path><path d="M9.31827 18.3446C9.45046 17.8529 9.17864 17.3369 8.68945 17.1724C8.56178 17.1294 8.43145 17.1145 8.30512 17.1243C8.10513 17.1398 7.91519 17.2172 7.76181 17.3434C7.62613 17.455 7.51905 17.6048 7.45893 17.7835C6.97634 19.2186 5.77062 19.9878 4.52406 20.4029C4.08525 20.549 3.6605 20.644 3.29471 20.7053C3.35607 20.3395 3.45098 19.9148 3.59711 19.476C4.01221 18.2294 4.78141 17.0237 6.21648 16.5411C6.39528 16.481 6.54504 16.3739 6.65665 16.2382C6.85126 16.0016 6.92988 15.678 6.84417 15.3647C6.83922 15.3466 6.83373 15.3286 6.82767 15.3106C6.74106 15.053 6.55701 14.8557 6.33037 14.7459C6.10949 14.6389 5.84816 14.615 5.59715 14.6994C5.47743 14.7397 5.36103 14.7831 5.24786 14.8294C3.22626 15.6569 2.2347 17.4173 1.75357 18.8621C1.49662 19.6337 1.36993 20.3554 1.30679 20.8818C1.27505 21.1464 1.25893 21.3654 1.25072 21.5213C1.24662 21.5993 1.24448 21.6618 1.24337 21.7066L1.243 21.7226L1.24235 21.7605L1.2422 21.7771L1.24217 21.7827L1.24217 21.7856C1.24217 22.3221 1.67703 22.7579 2.2137 22.7579L2.2155 22.7579L2.22337 22.7578L2.23956 22.7577C2.25293 22.7575 2.27096 22.7572 2.29338 22.7567C2.33821 22.7555 2.40073 22.7534 2.47876 22.7493C2.63466 22.7411 2.85361 22.725 3.11822 22.6932C3.64462 22.6301 4.36636 22.5034 5.13797 22.2464C6.58274 21.7653 8.3431 20.7738 9.17063 18.7522C9.21696 18.639 9.26037 18.5226 9.30064 18.4029C9.30716 18.3835 9.31304 18.364 9.31827 18.3446Z"></path></svg> <aside aria-label="Reminder" class="starlight-aside starlight-aside--tip"><p class="starlight-aside__title" aria-hidden="true"><svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" class="starlight-aside__icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.43909 8.85483L1.44039 8.85354L4.96668 5.33815C5.30653 4.99386 5.7685 4.79662 6.2524 4.78972L6.26553 4.78963L12.9014 4.78962L13.8479 3.84308C16.9187 0.772319 20.0546 0.770617 21.4678 0.975145C21.8617 1.02914 22.2271 1.21053 22.5083 1.4917C22.7894 1.77284 22.9708 2.13821 23.0248 2.53199C23.2294 3.94517 23.2278 7.08119 20.1569 10.1521L19.2107 11.0983V17.7338L19.2106 17.7469C19.2037 18.2308 19.0067 18.6933 18.6624 19.0331L15.1456 22.5608C14.9095 22.7966 14.6137 22.964 14.29 23.0449C13.9663 23.1259 13.6267 23.1174 13.3074 23.0204C12.9881 22.9235 12.7011 22.7417 12.4771 22.4944C12.2533 22.2473 12.1006 21.9441 12.0355 21.6171L11.1783 17.3417L6.65869 12.822L4.34847 12.3589L2.38351 11.965C2.05664 11.8998 1.75272 11.747 1.50564 11.5232C1.25835 11.2992 1.07653 11.0122 0.979561 10.6929C0.882595 10.3736 0.874125 10.034 0.955057 9.7103C1.03599 9.38659 1.20328 9.09092 1.43909 8.85483ZM6.8186 10.8724L2.94619 10.096L6.32006 6.73268H10.9583L6.8186 10.8724ZM15.2219 5.21703C17.681 2.75787 20.0783 2.75376 21.1124 2.8876C21.2462 3.92172 21.2421 6.31895 18.783 8.77812L12.0728 15.4883L8.51172 11.9272L15.2219 5.21703ZM13.9042 21.0538L13.1279 17.1811L17.2676 13.0414V17.68L13.9042 21.0538Z"></path><path d="M9.31827 18.3446C9.45046 17.8529 9.17864 17.3369 8.68945 17.1724C8.56178 17.1294 8.43145 17.1145 8.30512 17.1243C8.10513 17.1398 7.91519 17.2172 7.76181 17.3434C7.62613 17.455 7.51905 17.6048 7.45893 17.7835C6.97634 19.2186 5.77062 19.9878 4.52406 20.4029C4.08525 20.549 3.6605 20.644 3.29471 20.7053C3.35607 20.3395 3.45098 19.9148 3.59711 19.476C4.01221 18.2294 4.78141 17.0237 6.21648 16.5411C6.39528 16.481 6.54504 16.3739 6.65665 16.2382C6.85126 16.0016 6.92988 15.678 6.84417 15.3647C6.83922 15.3466 6.83373 15.3286 6.82767 15.3106C6.74106 15.053 6.55701 14.8557 6.33037 14.7459C6.10949 14.6389 5.84816 14.615 5.59715 14.6994C5.47743 14.7397 5.36103 14.7831 5.24786 14.8294C3.22626 15.6569 2.2347 17.4173 1.75357 18.8621C1.49662 19.6337 1.36993 20.3554 1.30679 20.8818C1.27505 21.1464 1.25893 21.3654 1.25072 21.5213C1.24662 21.5993 1.24448 21.6618 1.24337 21.7066L1.243 21.7226L1.24235 21.7605L1.2422 21.7771L1.24217 21.7827L1.24217 21.7856C1.24217 22.3221 1.67703 22.7579 2.2137 22.7579L2.2155 22.7579L2.22337 22.7578L2.23956 22.7577C2.25293 22.7575 2.27096 22.7572 2.29338 22.7567C2.33821 22.7555 2.40073 22.7534 2.47876 22.7493C2.63466 22.7411 2.85361 22.725 3.11822 22.6932C3.64462 22.6301 4.36636 22.5034 5.13797 22.2464C6.58274 21.7653 8.3431 20.7738 9.17063 18.7522C9.21696 18.639 9.26037 18.5226 9.30064 18.4029C9.30716 18.3835 9.31304 18.364 9.31827 18.3446Z"></path></svg>
{labels['challenge.footer.reminder'] ?? 'Reminder'}</p><section class="starlight-aside__content"> {labels['challenge.footer.reminder'] ?? 'Reminder'}</p><section class="starlight-aside__content">
<p>{labels['challenge.footer.start'] ?? 'Your PR title must start with'} <b>{labels['challenge.footer.answer'] ?? 'Answer:'}{challenge?.number}</b>.</p></section></aside> <p>{labels['challenge.footer.start'] ?? 'Your PR title must start with'} <b>{labels['challenge.footer.answer'] ?? 'Answer:'}{challengeNumber}</b>.</p></section></aside>
<div class="article-footer"> <div class="article-footer">
<a <a

View File

@@ -7,17 +7,17 @@ import ChallengeFooter from './ChallengeFooter.astro';
import CommentSection from './CommentSection.astro'; import CommentSection from './CommentSection.astro';
const { labels } = Astro.props; const { labels } = Astro.props;
const {challenge} = Astro.props.entry.data; const { challengeNumber } = Astro.props.entry.data;
const author = Astro.props.entry.data.author ? await getEntry(Astro.props.entry.data.author) : null; const author = Astro.props.entry.data.author ? await getEntry(Astro.props.entry.data.author) : null;
const renderCommentSection = !Astro.props.entry.data.noCommentSection; const renderCommentSection = !Astro.props.entry.data.noCommentSection;
--- ---
{ challenge?.number && author && <Author {...author.data} {labels}/> } { challengeNumber && author && <Author {...author.data} {labels}/> }
<Default {...Astro.props}><slot /></Default> <Default {...Astro.props}><slot /></Default>
{challenge?.number && <ChallengeFooter {...Astro.props} />} {challengeNumber && <ChallengeFooter {...Astro.props} />}
{ renderCommentSection && <CommentSection {...Astro.props} /> } { renderCommentSection && <CommentSection {...Astro.props} /> }

View File

@@ -1,15 +1,13 @@
--- ---
import type { Props } from '@astrojs/starlight/props'; import type { Props } from '@astrojs/starlight/props';
import Default from '@astrojs/starlight/components/PageTitle.astro'; import Default from '@astrojs/starlight/components/PageTitle.astro';
const challenge = Astro.props.entry.data.challenge; const { challengeNumber } = Astro.props.entry.data;
const { labels } = Astro.props; const { labels } = Astro.props;
--- ---
<div class="page-title-content"> <div class="page-title-content">
<Default {...Astro.props}><slot /></Default> <Default {...Astro.props}><slot /></Default>
{challenge?.number && <div class="chip">{labels['page.title.challenge'] ?? 'Challenge'} #{challenge.number}</div> } {challengeNumber && <div class="chip">{labels['page.title.challenge'] ?? 'Challenge'} #{challengeNumber}</div> }
</div> </div>
<style> <style>

View File

@@ -16,11 +16,7 @@ const docs = defineCollection({
docsSchema({ docsSchema({
extend: z.object({ extend: z.object({
noCommentSection: z.boolean().optional().default(false), noCommentSection: z.boolean().optional().default(false),
challenge: z challengeNumber: z.union([z.number(), z.boolean()]).default(false),
.object({
number: z.union([z.number(), z.boolean()]).default(false),
})
.optional(),
author: reference('authors').optional(), author: reference('authors').optional(),
command: z.string().optional(), command: z.string().optional(),
blogLink: z.string().optional(), blogLink: z.string().optional(),

View File

@@ -2,8 +2,7 @@
title: 🟢 Projection title: 🟢 Projection
description: Challenge 1 is about learning how to project DOM element through components description: Challenge 1 is about learning how to project DOM element through components
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 1
number: 1
command: angular-projection command: angular-projection
blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5 blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5
videoLink: videoLink:

View File

@@ -2,8 +2,7 @@
title: 🔴 Utility Wrapper Pipe title: 🔴 Utility Wrapper Pipe
description: Challenge 10 is about creating a pipe to wrap utilities description: Challenge 10 is about creating a pipe to wrap utilities
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 10
number: 10
command: angular-pipe-hard command: angular-pipe-hard
sidebar: sidebar:
order: 202 order: 202

View File

@@ -2,8 +2,7 @@
title: 🟠 Highly Customizable CSS title: 🟠 Highly Customizable CSS
description: Challenge 13 is about creating highly customizable CSS styles description: Challenge 13 is about creating highly customizable CSS styles
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 13
number: 13
command: angular-styling command: angular-styling
sidebar: sidebar:
order: 104 order: 104

View File

@@ -2,8 +2,7 @@
title: 🔴 Master Dependancy Injection title: 🔴 Master Dependancy Injection
description: Challenge 16 is about masjering how dependancy injection works description: Challenge 16 is about masjering how dependancy injection works
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 16
number: 16
command: angular-di command: angular-di
sidebar: sidebar:
order: 203 order: 203

View File

@@ -2,8 +2,7 @@
title: 🟢 Anchor Navigation title: 🟢 Anchor Navigation
description: Challenge 21 is about navigating inside the page with anchor description: Challenge 21 is about navigating inside the page with anchor
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 21
number: 21
command: angular-anchor-scrolling command: angular-anchor-scrolling
sidebar: sidebar:
order: 4 order: 4

View File

@@ -2,8 +2,7 @@
title: 🟢 @RouterInput() title: 🟢 @RouterInput()
description: Challenge 22 is about using the @Input decorator to retreive router params. description: Challenge 22 is about using the @Input decorator to retreive router params.
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 22
number: 22
command: angular-router-input command: angular-router-input
blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617 blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617
sidebar: sidebar:

View File

@@ -2,8 +2,7 @@
title: 🟠 Directive Enhancement title: 🟠 Directive Enhancement
description: Challenge 3 is about enhancing a built-in directive description: Challenge 3 is about enhancing a built-in directive
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 3
number: 3
command: angular-ngfor-enhancement command: angular-ngfor-enhancement
blogLink: https://medium.com/@thomas.laforge/ngfor-enhancement-716b44656a6c blogLink: https://medium.com/@thomas.laforge/ngfor-enhancement-716b44656a6c
sidebar: sidebar:

View File

@@ -2,8 +2,7 @@
title: 🔴 Interoperability Rxjs/Signal title: 🔴 Interoperability Rxjs/Signal
description: Challenge 30 is about learning how to mix signal with Rxjs description: Challenge 30 is about learning how to mix signal with Rxjs
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 30
number: 30
command: angular-interop-rxjs-signal command: angular-interop-rxjs-signal
sidebar: sidebar:
order: 204 order: 204

View File

@@ -2,8 +2,7 @@
title: 🟢 Module to Standalone title: 🟢 Module to Standalone
description: Challenge 31 is about migrating a module based application to a standalone application. description: Challenge 31 is about migrating a module based application to a standalone application.
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 31
number: 31
command: angular-module-to-standalone command: angular-module-to-standalone
sidebar: sidebar:
order: 6 order: 6

View File

@@ -2,8 +2,7 @@
title: 🟠 Change Detection Bug title: 🟠 Change Detection Bug
description: Challenge 32 is about debugging an application that has issue when change detection is triggered description: Challenge 32 is about debugging an application that has issue when change detection is triggered
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 32
number: 32
command: angular-bug-cd command: angular-bug-cd
blogLink: https://medium.com/ngconf/function-calls-inside-template-are-dangerous-15f9822a6629 blogLink: https://medium.com/ngconf/function-calls-inside-template-are-dangerous-15f9822a6629
sidebar: sidebar:

View File

@@ -2,8 +2,7 @@
title: 🟠 Decoupling Components title: 🟠 Decoupling Components
description: Challenge 33 is about decoupling two strongly coupled components using Injection Token description: Challenge 33 is about decoupling two strongly coupled components using Injection Token
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 33
number: 33
command: angular-decoupling command: angular-decoupling
sidebar: sidebar:
order: 106 order: 106

View File

@@ -2,8 +2,7 @@
title: 🟠 InjectionToken title: 🟠 InjectionToken
description: Challenge 39 is about learning the power of dependancy injection description: Challenge 39 is about learning the power of dependancy injection
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 39
number: 39
command: angular-injection-token command: angular-injection-token
sidebar: sidebar:
order: 118 order: 118

View File

@@ -2,8 +2,7 @@
title: 🔴 Typed ContextOutlet title: 🔴 Typed ContextOutlet
description: Challenge 4 is about strongly typing ngContextOutlet directives description: Challenge 4 is about strongly typing ngContextOutlet directives
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 4
number: 4
command: angular-context-outlet-type command: angular-context-outlet-type
blogLink: https://medium.com/@thomas.laforge/ngtemplateoutlet-type-checking-5d2dcb07a2c6 blogLink: https://medium.com/@thomas.laforge/ngtemplateoutlet-type-checking-5d2dcb07a2c6
sidebar: sidebar:

View File

@@ -2,8 +2,7 @@
title: 🟢 Crud application title: 🟢 Crud application
description: Challenge 5 is about refactoring a crud application description: Challenge 5 is about refactoring a crud application
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 5
number: 5
command: angular-crud command: angular-crud
sidebar: sidebar:
order: 2 order: 2

View File

@@ -2,8 +2,7 @@
title: 🟠 Structural Directive title: 🟠 Structural Directive
description: Challenge 6 is about creating a structural directive to handle permissions description: Challenge 6 is about creating a structural directive to handle permissions
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 6
number: 6
command: angular-permissions command: angular-permissions
blogLink: https://medium.com/@thomas.laforge/create-a-custom-structural-directive-to-manage-permissions-like-a-pro-11a1acad30ad blogLink: https://medium.com/@thomas.laforge/create-a-custom-structural-directive-to-manage-permissions-like-a-pro-11a1acad30ad
sidebar: sidebar:

View File

@@ -2,8 +2,7 @@
title: 🟢 Pure Pipe title: 🟢 Pure Pipe
description: Challenge 8 is about creating a pure pipe description: Challenge 8 is about creating a pure pipe
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 8
number: 8
command: angular-pipe-easy command: angular-pipe-easy
blogLink: https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d blogLink: https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d
sidebar: sidebar:

View File

@@ -2,8 +2,7 @@
title: 🟠 Wrap Function Pipe title: 🟠 Wrap Function Pipe
description: Challenge 9 is about creating a pipe to wrap component fonctions description: Challenge 9 is about creating a pipe to wrap component fonctions
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 9
number: 9
command: angular-pipe-intermediate command: angular-pipe-intermediate
blogLink: https://medium.com/ngconf/boost-your-apps-performance-by-wrapping-your-functions-inside-a-pipe-7e889a901d1d blogLink: https://medium.com/ngconf/boost-your-apps-performance-by-wrapping-your-functions-inside-a-pipe-7e889a901d1d
sidebar: sidebar:

View File

@@ -2,8 +2,7 @@
title: 🟠 Control Value Accessor title: 🟠 Control Value Accessor
description: Challenge 41 is about creating a custom form control that implements Control Value Accessor interface. description: Challenge 41 is about creating a custom form control that implements Control Value Accessor interface.
author: stanislav-gavrilov author: stanislav-gavrilov
challenge: challengeNumber: 41
number: 41
command: forms-control-value-accessor command: forms-control-value-accessor
sidebar: sidebar:
order: 1 order: 1

View File

@@ -2,8 +2,7 @@
title: 🟠 Effect vs Selector title: 🟠 Effect vs Selector
description: Challenge 2 is about learning the difference between effects and selectors in NgRx description: Challenge 2 is about learning the difference between effects and selectors in NgRx
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 2
number: 2
command: ngrx-effect-selector command: ngrx-effect-selector
blogLink: https://medium.com/@thomas.laforge/ngrx-effect-vs-reducer-vs-selector-58337ab59043 blogLink: https://medium.com/@thomas.laforge/ngrx-effect-vs-reducer-vs-selector-58337ab59043
sidebar: sidebar:

View File

@@ -2,8 +2,7 @@
title: 🔴 Power of Effect title: 🔴 Power of Effect
description: Challenge 7 is about creating an Ngrx effect with another Rxjs Hot observable description: Challenge 7 is about creating an Ngrx effect with another Rxjs Hot observable
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 7
number: 7
command: ngrx-notification command: ngrx-notification
sidebar: sidebar:
order: 206 order: 206

View File

@@ -2,8 +2,7 @@
title: 🔴 Extend Lib Generator title: 🔴 Extend Lib Generator
description: Challenge 25 is about creating a Nx generator to extend the built-in Library Generator description: Challenge 25 is about creating a Nx generator to extend the built-in Library Generator
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 25
number: 25
sidebar: sidebar:
order: 207 order: 207
--- ---

View File

@@ -2,8 +2,7 @@
title: 🟠 Component Generator title: 🟠 Component Generator
description: Challenge 26 is about creating a Nx generator to create a custom component description: Challenge 26 is about creating a Nx generator to create a custom component
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 26
number: 26
sidebar: sidebar:
order: 116 order: 116
--- ---

View File

@@ -2,8 +2,7 @@
title: 🟢 Custom Eslint Rule title: 🟢 Custom Eslint Rule
description: Challenge 27 is about creating a custom Eslint Rule to forbid enums description: Challenge 27 is about creating a custom Eslint Rule to forbid enums
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 27
number: 27
sidebar: sidebar:
order: 12 order: 12
--- ---

View File

@@ -2,8 +2,7 @@
title: 🟠 Optimize Change Detection title: 🟠 Optimize Change Detection
description: Challenge 12 about optimizing the number of change detection cycle while scrolling description: Challenge 12 about optimizing the number of change detection cycle while scrolling
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 12
number: 12
command: performance-scroll-cd command: performance-scroll-cd
sidebar: sidebar:
order: 107 order: 107

View File

@@ -2,8 +2,7 @@
title: 🟢 Default vs OnPush title: 🟢 Default vs OnPush
description: Challenge 34 is about learning the difference between Default and OnPush Change Detection Strategy. description: Challenge 34 is about learning the difference between Default and OnPush Change Detection Strategy.
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 34
number: 34
command: performance-default-onpush command: performance-default-onpush
sidebar: sidebar:
order: 7 order: 7

View File

@@ -2,8 +2,7 @@
title: 🟢 Memoization title: 🟢 Memoization
description: Challenge 35 is about learning how pure pipe works description: Challenge 35 is about learning how pure pipe works
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 35
number: 35
command: performance-memoized command: performance-memoized
sidebar: sidebar:
order: 8 order: 8

View File

@@ -2,8 +2,7 @@
title: 🟢 NgFor Optimization title: 🟢 NgFor Optimization
description: Challenge 36 is about learning how trackby works description: Challenge 36 is about learning how trackby works
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 36
number: 36
command: performance-ngfor-optimize command: performance-ngfor-optimize
sidebar: sidebar:
order: 13 order: 13

View File

@@ -2,8 +2,7 @@
title: 🟠 Optimize Big List title: 🟠 Optimize Big List
description: Challenge 37 is about learning how virtualization optimize big list rendering description: Challenge 37 is about learning how virtualization optimize big list rendering
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 37
number: 37
command: performance-ngfor-biglist command: performance-ngfor-biglist
sidebar: sidebar:
order: 117 order: 117

View File

@@ -2,8 +2,7 @@
title: 🟠 Web workers title: 🟠 Web workers
description: Challenge 40 is about learning how to create and use a web worker description: Challenge 40 is about learning how to create and use a web worker
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 40
number: 40
command: performance-christmas-web-worker command: performance-christmas-web-worker
sidebar: sidebar:
order: 119 order: 119

View File

@@ -2,8 +2,7 @@
title: 🟠 High Order Operator Bug title: 🟠 High Order Operator Bug
description: Challenge 11 is about resolving a Rxjs bug because of high order operators description: Challenge 11 is about resolving a Rxjs bug because of high order operators
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 11
number: 11
command: rxjs-pipe-bug command: rxjs-pipe-bug
sidebar: sidebar:
order: 114 order: 114

View File

@@ -2,8 +2,7 @@
title: 🟢 Race Condition title: 🟢 Race Condition
description: Challenge 14 is about race condition in Rxjs description: Challenge 14 is about race condition in Rxjs
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 14
number: 14
command: rxjs-race-condition command: rxjs-race-condition
sidebar: sidebar:
order: 11 order: 11

View File

@@ -3,8 +3,7 @@ title: 🟢 catchError
description: Challenge 38 is about learning obervable completion. description: Challenge 38 is about learning obervable completion.
author: devesh-chaudhari author: devesh-chaudhari
command: rxjs-catch-error command: rxjs-catch-error
challenge: challengeNumber: 38
number: 38
sidebar: sidebar:
order: 14 order: 14
--- ---

View File

@@ -2,8 +2,7 @@
title: 🟠 Router title: 🟠 Router
description: Challenge 17 is about testing the router description: Challenge 17 is about testing the router
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 17
number: 17
command: testing-router-outlet command: testing-router-outlet
sidebar: sidebar:
order: 108 order: 108

View File

@@ -2,8 +2,7 @@
title: 🟠 Nested Components title: 🟠 Nested Components
description: Challenge 18 is about testing nested components description: Challenge 18 is about testing nested components
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 18
number: 18
command: testing-nested command: testing-nested
sidebar: sidebar:
order: 109 order: 109

View File

@@ -2,8 +2,7 @@
title: 🟠 Input Output title: 🟠 Input Output
description: Challenge 19 is about testing inputs and ouputs description: Challenge 19 is about testing inputs and ouputs
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 19
number: 19
command: testing-input-output command: testing-input-output
sidebar: sidebar:
order: 110 order: 110

View File

@@ -2,8 +2,7 @@
title: 🟠 Modal title: 🟠 Modal
description: Challenge 20 is about testing modals description: Challenge 20 is about testing modals
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 20
number: 20
command: testing-modal command: testing-modal
sidebar: sidebar:
order: 111 order: 111

View File

@@ -2,8 +2,7 @@
title: 🟢 Harness title: 🟢 Harness
description: Challenge 23 is about testing with component harnesses description: Challenge 23 is about testing with component harnesses
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 23
number: 23
command: testing-harness command: testing-harness
sidebar: sidebar:
order: 9 order: 9

View File

@@ -2,8 +2,7 @@
title: 🟠 Harness Creation title: 🟠 Harness Creation
description: Challenge 24 is about creating a component harness. description: Challenge 24 is about creating a component harness.
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 24
number: 24
command: testing-create-harness command: testing-create-harness
sidebar: sidebar:
order: 112 order: 112

View File

@@ -2,8 +2,7 @@
title: 🟢 Checkbox title: 🟢 Checkbox
description: Challenge 28 is about testing a simple checkbox description: Challenge 28 is about testing a simple checkbox
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 28
number: 28
command: testing-checkbox command: testing-checkbox
sidebar: sidebar:
order: 10 order: 10

View File

@@ -2,8 +2,7 @@
title: 🔴 Real-life Application title: 🔴 Real-life Application
description: Challenge 29 is about testing a real-life application description: Challenge 29 is about testing a real-life application
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 29
number: 29
command: testing-todos-list command: testing-todos-list
sidebar: sidebar:
order: 205 order: 205

View File

@@ -2,8 +2,7 @@
title: 🟠 Function Overload title: 🟠 Function Overload
description: Challenge 15 is about creating overload functions description: Challenge 15 is about creating overload functions
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 15
number: 15
command: typescript-overload command: typescript-overload
blogLink: https://medium.com/ngconf/function-overloading-in-typescript-8236706b2c05 blogLink: https://medium.com/ngconf/function-overloading-in-typescript-8236706b2c05
sidebar: sidebar:

View File

@@ -2,9 +2,7 @@
title: 🟢 Proyección title: 🟢 Proyección
description: Desafio 1 trata sobre aprender a proyectar elementos del DOM a través de componentes, description: Desafio 1 trata sobre aprender a proyectar elementos del DOM a través de componentes,
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 1
label: Reto
number: 1
command: angular-projection command: angular-projection
blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5 blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5
videoLink: videoLink:

View File

@@ -2,9 +2,7 @@
title: 🟢 @RouterInput() title: 🟢 @RouterInput()
description: El desafío 22 trata sobre el uso del decorador @Input para utilizar parámetros del router. description: El desafío 22 trata sobre el uso del decorador @Input para utilizar parámetros del router.
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 22
label: Reto
number: 22
command: angular-router-input command: angular-router-input
blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617 blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617
sidebar: sidebar:

View File

@@ -2,9 +2,7 @@
title: 🟠 Mejorar Directiva title: 🟠 Mejorar Directiva
description: El desafío 3 se trata de una directive incorporada. description: El desafío 3 se trata de una directive incorporada.
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 3
label: Reto
number: 3
command: angular-ngfor-enhancement command: angular-ngfor-enhancement
blogLink: https://medium.com/@thomas.laforge/ngfor-enhancement-716b44656a6c blogLink: https://medium.com/@thomas.laforge/ngfor-enhancement-716b44656a6c
sidebar: sidebar:

View File

@@ -2,9 +2,7 @@
title: 🟠 InjectionToken title: 🟠 InjectionToken
description: Desafio de Angular 39 para aprender sobre el poder del InjectionToken description: Desafio de Angular 39 para aprender sobre el poder del InjectionToken
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 39
label: Reto
number: 39
command: angular-injection-token command: angular-injection-token
sidebar: sidebar:
order: 118 order: 118

View File

@@ -2,9 +2,7 @@
title: 🔴 ContextOutlet en forma de tipo title: 🔴 ContextOutlet en forma de tipo
description: El desafío 4 se trata de tipificar de manera fuerte las directivas de ngContextOutlet description: El desafío 4 se trata de tipificar de manera fuerte las directivas de ngContextOutlet
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 4
label: Reto
number: 4
command: angular-context-outlet-type command: angular-context-outlet-type
blogLink: https://medium.com/@thomas.laforge/ngtemplateoutlet-type-checking-5d2dcb07a2c6 blogLink: https://medium.com/@thomas.laforge/ngtemplateoutlet-type-checking-5d2dcb07a2c6
sidebar: sidebar:

View File

@@ -2,9 +2,7 @@
title: 🟢 Aplicación CRUD title: 🟢 Aplicación CRUD
description: El desafío 5 se trata de refactorizar una aplicación CRUD. description: El desafío 5 se trata de refactorizar una aplicación CRUD.
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 5
label: Reto
number: 5
command: angular-crud command: angular-crud
sidebar: sidebar:
order: 2 order: 2

View File

@@ -2,9 +2,7 @@
title: 🟠 Directiva Estructural title: 🟠 Directiva Estructural
description: El Desafío 6 se trata de generar una Directiva Estructural que manipule los permisos description: El Desafío 6 se trata de generar una Directiva Estructural que manipule los permisos
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 6
label: Reto
number: 6
command: angular-permissions command: angular-permissions
blogLink: https://medium.com/@thomas.laforge/create-a-custom-structural-directive-to-manage-permissions-like-a-pro-11a1acad30ad blogLink: https://medium.com/@thomas.laforge/create-a-custom-structural-directive-to-manage-permissions-like-a-pro-11a1acad30ad
sidebar: sidebar:

View File

@@ -2,9 +2,7 @@
title: 🟠 Optimizar el Change Detection al desplazarse title: 🟠 Optimizar el Change Detection al desplazarse
description: Desafío 12 sobre la optimización del número de ciclos de detección de cambios al desplazarse description: Desafío 12 sobre la optimización del número de ciclos de detección de cambios al desplazarse
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 12
label: Reto
number: 12
command: performance-scroll-cd command: performance-scroll-cd
sidebar: sidebar:
order: 107 order: 107

View File

@@ -2,9 +2,7 @@
title: 🟢 Default vs OnPush title: 🟢 Default vs OnPush
description: El desafío 34 trata sobre aprender la diferencia entre las estrategias de detección de cambios Default y OnPush. description: El desafío 34 trata sobre aprender la diferencia entre las estrategias de detección de cambios Default y OnPush.
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 34
label: Reto
number: 34
command: performance-default-onpush command: performance-default-onpush
sidebar: sidebar:
order: 7 order: 7

View File

@@ -2,9 +2,7 @@
title: 🟢 Memoización title: 🟢 Memoización
description: El desafío 35 trata sobre cómo funcionan las tuberías puras description: El desafío 35 trata sobre cómo funcionan las tuberías puras
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 35
label: Reto
number: 35
command: performance-memoized command: performance-memoized
sidebar: sidebar:
order: 8 order: 8

View File

@@ -2,9 +2,7 @@
title: 🟢 Optimización de NgFor title: 🟢 Optimización de NgFor
description: El Desafío 36 trata sobre como funciona trackby description: El Desafío 36 trata sobre como funciona trackby
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 36
label: Reto
number: 36
command: performance-ngfor-optimize command: performance-ngfor-optimize
sidebar: sidebar:
order: 13 order: 13

View File

@@ -2,9 +2,7 @@
title: 🟠 Optimizando una lista larga title: 🟠 Optimizando una lista larga
description: El desafio 37 trata sobre como optimizar una lista grande de elementos description: El desafio 37 trata sobre como optimizar una lista grande de elementos
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 37
label: Reto
number: 37
command: performance-ngfor-biglist command: performance-ngfor-biglist
sidebar: sidebar:
order: 117 order: 117

View File

@@ -2,8 +2,7 @@
title: 🟢 Projeção title: 🟢 Projeção
description: Desafio 1 é sobre aprender a projetar elementos DOM através de componentes description: Desafio 1 é sobre aprender a projetar elementos DOM através de componentes
author: thomas-laforge author: thomas-laforge
challenge: challengeNumber: 1
number: 1
command: angular-projection command: angular-projection
blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5 blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5
videoLink: videoLink:

View File

@@ -2,9 +2,7 @@
title: <%= difficulty %> <%= title %> title: <%= difficulty %> <%= title %>
description: Challenge <%= challengeNumber %> is about ... description: Challenge <%= challengeNumber %> is about ...
author: <%= author %> author: <%= author %>
challenge: challengeNumber: <%= challengeNumber %>
label: Challenge
number: <%= challengeNumber %>
command: <%= appProjectName %> command: <%= appProjectName %>
sidebar: sidebar:
order: <%= order %> order: <%= order %>