Skip to content

Commit

Permalink
Create a "click counter button" in my vanilla TypeScript app
Browse files Browse the repository at this point in the history
Read this commit's story on Medium:
- https://link.medium.com/x3cuKM1rPdb
  • Loading branch information
sjlutterbie committed Feb 13, 2021
1 parent 21d7853 commit c0404bd
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/activities/click-to-count/click-to-count.mount.ts
@@ -0,0 +1,10 @@
import { MountActivityFn } from '../activities.types';
import { clickToCountActivity } from './click-to-count';

export const mountClickToCount: MountActivityFn = function (mountPoint) {
const clickToCount = clickToCountActivity();

mountPoint.appendChild(clickToCount);

return mountPoint;
};
21 changes: 21 additions & 0 deletions src/activities/click-to-count/click-to-count.test.ts
@@ -0,0 +1,21 @@
import { clickToCountActivity } from './click-to-count';

describe('clickToCountActivity', () => {
it('Should render a button', () => {
const clickToCount = clickToCountActivity();

expect(clickToCount.nodeName).toEqual('BUTTON');
});

it('Should display a properly incrementing count', () => {
const clickToCount = clickToCountActivity();
expect(clickToCount.textContent).toContain('0');
clickToCount.click();
expect(clickToCount.textContent).toContain('1');
clickToCount.click();
expect(clickToCount.textContent).toContain('2');
clickToCount.click();
clickToCount.click();
expect(clickToCount.textContent).toContain('4');
});
});
18 changes: 18 additions & 0 deletions src/activities/click-to-count/click-to-count.ts
@@ -0,0 +1,18 @@
export function clickToCountActivity(): HTMLButtonElement {
let count = 0;

const clickToCount = document.createElement('button');
clickToCount.addEventListener('click', handleClick);
updateButtonText();

function handleClick() {
count += 1;
updateButtonText();
}

function updateButtonText() {
clickToCount.textContent = `I've been clicked ${count} times`;
}

return clickToCount;
}
1 change: 1 addition & 0 deletions src/activities/click-to-count/index.ts
@@ -0,0 +1 @@
export { mountClickToCount } from './click-to-count.mount';
1 change: 1 addition & 0 deletions src/activities/read-about-simon/mount.ts
@@ -1,4 +1,5 @@
import { MountActivityFn } from '../activities.types';

import template from './template.html';

export const mountReadAboutSimon: MountActivityFn = function (
Expand Down
1 change: 1 addition & 0 deletions src/activities/read-about-site/mount.ts
@@ -1,4 +1,5 @@
import { MountActivityFn } from '../activities.types';

import template from './template.html';

export const mountReadAboutSite: MountActivityFn = function (
Expand Down
4 changes: 4 additions & 0 deletions src/activities/read-home/mount.ts
@@ -1,10 +1,14 @@
import { MountActivityFn } from '../activities.types';
import { mountClickToCount } from '../click-to-count';

import template from './template.html';

export const mountReadHome: MountActivityFn = function (
mountPoint: HTMLElement
) {
mountPoint.innerHTML = template;

mountClickToCount(mountPoint);

return mountPoint;
};
5 changes: 5 additions & 0 deletions src/activities/read-technology-used/mount.ts
@@ -1,9 +1,14 @@
import { MountActivityFn } from '../activities.types';
import { mountClickToCount } from '../click-to-count';

import template from './template.html';

export const mountReadTechnologyUsed: MountActivityFn = function (
mountPoint: HTMLElement
) {
mountPoint.innerHTML = template;

mountClickToCount(mountPoint);

return mountPoint;
};

0 comments on commit c0404bd

Please sign in to comment.