Skip to content

Commit 113b199

Browse files
committed
Add interface and outline for code and tests
1 parent 403bf73 commit 113b199

File tree

4 files changed

+164
-27
lines changed

4 files changed

+164
-27
lines changed

package.json

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,26 +45,27 @@
4545
],
4646
"license": "MIT",
4747
"devDependencies": {
48+
"@anansi/babel-preset": "3.4.1",
49+
"@anansi/browserslist-config": "1.4.1",
50+
"@anansi/eslint-plugin": "0.15.3",
51+
"@anansi/jest-preset": "0.8.2",
52+
"@babel/cli": "7.21.0",
4853
"@babel/core": "7.21.0",
54+
"@testing-library/react": "^14.0.0",
55+
"@types/jest": "29.4.0",
56+
"@types/react-test-renderer": "18.0.0",
4957
"@typescript-eslint/eslint-plugin": "^5.11.0",
58+
"@zerollup/ts-transform-paths": "1.7.18",
5059
"eslint": "^7.0.0 || ^8.0.0",
5160
"eslint-plugin-import": "^2.22.0",
5261
"eslint-plugin-prettier": "^4.0.0",
5362
"eslint-plugin-react": "^7.22.0",
5463
"eslint-plugin-react-hooks": "^4.2.0",
55-
"prettier": "^2.2.1",
56-
"@anansi/babel-preset": "3.4.1",
57-
"@anansi/eslint-plugin": "0.15.3",
58-
"@anansi/browserslist-config": "1.4.1",
59-
"typescript": "4.9.5",
60-
"@anansi/jest-preset": "0.8.2",
6164
"jest": "29.4.3",
62-
"@types/jest": "29.4.0",
63-
"@types/react-test-renderer": "18.0.0",
64-
"react-test-renderer": "18.2.0",
65+
"jest-axe": "^7.0.0",
6566
"jest-environment-jsdom": "29.4.3",
66-
"@babel/cli": "7.21.0",
67-
"@zerollup/ts-transform-paths": "1.7.18",
67+
"prettier": "^2.2.1",
68+
"react-test-renderer": "18.2.0",
6869
"rimraf": "4.1.2",
6970
"rollup": "3.17.2",
7071
"rollup-plugin-babel": "4.4.0",
@@ -73,9 +74,13 @@
7374
"rollup-plugin-json": "4.0.0",
7475
"rollup-plugin-node-resolve": "5.2.0",
7576
"rollup-plugin-replace": "2.2.0",
76-
"rollup-plugin-terser": "7.0.2"
77+
"rollup-plugin-terser": "7.0.2",
78+
"typescript": "4.9.5"
7779
},
7880
"dependencies": {
7981
"@babel/runtime": "7.21.0"
82+
},
83+
"peerDependencies": {
84+
"react": "^18.2.0"
8085
}
8186
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
// Happy Path
2+
// Transitions work
3+
// close callback works
4+
// prop variations don't blow shit up
5+
16
describe('Simple Thing', () => {
27
it('should just work', () => {
38
expect(true).toBe(true);

src/index.ts

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,46 @@
1-
export default function identity<T>(arg: T): T {
2-
return arg;
1+
import React from 'react';
2+
3+
interface WizardFlowProps<Step extends keyof any> {
4+
initialStep: Step;
5+
onClose?: () => void;
6+
steps: Record<Step, JSX.Element>;
7+
}
8+
9+
interface WizardFlowContext<Step extends keyof any> {
10+
transition: (step: Step) => void;
11+
close: () => void;
12+
}
13+
14+
interface WizardFlow<Step extends keyof any> {
15+
Context: React.Context<WizardFlowContext<Step>>;
16+
Provider: (props: WizardFlowProps<Step>) => JSX.Element;
17+
}
18+
19+
const DEFAULT_WIZARD_FLOW_CONTEXT = {
20+
transition: () => {}, //eslint-disable-line @typescript-eslint/no-empty-function
21+
close: () => {}, //eslint-disable-line @typescript-eslint/no-empty-function
22+
};
23+
24+
export function createWizardFlow<Steps extends Record<string, keyof any>>(
25+
_: Steps,
26+
) {
27+
type Step = Steps[keyof Steps];
28+
29+
const Context = React.createContext<WizardFlowContext<Step>>(
30+
DEFAULT_WIZARD_FLOW_CONTEXT,
31+
);
32+
33+
const Provider = () => {
34+
/* hold context of what the current step is */
35+
/* set context value for interacting with the flow state */
36+
/* render provider and current step */
37+
};
38+
39+
return { Provider, Context };
40+
}
41+
42+
export function useWizardFlow<Step extends keyof any>(
43+
wizardFlow: WizardFlow<Step>,
44+
) {
45+
return React.useContext(wizardFlow.Context);
346
}

yarn.lock

Lines changed: 97 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,6 +1628,29 @@
16281628
dependencies:
16291629
"@sinonjs/commons" "^2.0.0"
16301630

1631+
"@testing-library/dom@^9.0.0":
1632+
version "9.0.0"
1633+
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.0.0.tgz#cc50e8df2a7dccff95555102beebbae60e95e95e"
1634+
integrity sha512-+/TLgKNFsYUshOY/zXsQOk+PlFQK+eyJ9T13IDVNJEi+M+Un7xlJK+FZKkbGSnf0+7E1G6PlDhkSYQ/GFiruBQ==
1635+
dependencies:
1636+
"@babel/code-frame" "^7.10.4"
1637+
"@babel/runtime" "^7.12.5"
1638+
"@types/aria-query" "^5.0.1"
1639+
aria-query "^5.0.0"
1640+
chalk "^4.1.0"
1641+
dom-accessibility-api "^0.5.9"
1642+
lz-string "^1.4.4"
1643+
pretty-format "^27.0.2"
1644+
1645+
"@testing-library/react@^14.0.0":
1646+
version "14.0.0"
1647+
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c"
1648+
integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==
1649+
dependencies:
1650+
"@babel/runtime" "^7.12.5"
1651+
"@testing-library/dom" "^9.0.0"
1652+
"@types/react-dom" "^18.0.0"
1653+
16311654
"@tootallnate/once@1":
16321655
version "1.1.2"
16331656
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
@@ -1638,6 +1661,11 @@
16381661
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
16391662
integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
16401663

1664+
"@types/aria-query@^5.0.1":
1665+
version "5.0.1"
1666+
resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc"
1667+
integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==
1668+
16411669
"@types/babel__core@^7.1.14":
16421670
version "7.20.0"
16431671
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891"
@@ -1749,6 +1777,13 @@
17491777
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
17501778
integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
17511779

1780+
"@types/react-dom@^18.0.0":
1781+
version "18.0.11"
1782+
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33"
1783+
integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==
1784+
dependencies:
1785+
"@types/react" "*"
1786+
17521787
17531788
version "18.0.0"
17541789
resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.0.tgz#7b7f69ca98821ea5501b21ba24ea7b6139da2243"
@@ -2045,7 +2080,7 @@ argparse@^2.0.1:
20452080
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
20462081
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
20472082

2048-
aria-query@^5.1.3:
2083+
aria-query@^5.0.0, aria-query@^5.1.3:
20492084
version "5.1.3"
20502085
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e"
20512086
integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==
@@ -2141,6 +2176,11 @@ aws4@^1.8.0:
21412176
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3"
21422177
integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==
21432178

2179+
2180+
version "4.5.1"
2181+
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.5.1.tgz#04d561c11b6d76d096d34e9d14ba2c294fb20cdc"
2182+
integrity sha512-1exVbW0X1O/HSr/WMwnaweyqcWOgZgLiVxdLG34pvSQk4NlYQr9OUy0JLwuhFfuVNQzzqgH57eYzkFBCb3bIsQ==
2183+
21442184
axe-core@^4.6.2:
21452185
version "4.6.3"
21462186
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece"
@@ -2448,6 +2488,14 @@ caseless@~0.12.0:
24482488
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
24492489
integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
24502490

2491+
[email protected], chalk@^4.0.0, chalk@^4.1.0:
2492+
version "4.1.2"
2493+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
2494+
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
2495+
dependencies:
2496+
ansi-styles "^4.1.0"
2497+
supports-color "^7.1.0"
2498+
24512499
chalk@^2.0.0:
24522500
version "2.4.2"
24532501
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
@@ -2457,14 +2505,6 @@ chalk@^2.0.0:
24572505
escape-string-regexp "^1.0.5"
24582506
supports-color "^5.3.0"
24592507

2460-
chalk@^4.0.0, chalk@^4.1.0:
2461-
version "4.1.2"
2462-
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
2463-
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
2464-
dependencies:
2465-
ansi-styles "^4.1.0"
2466-
supports-color "^7.1.0"
2467-
24682508
char-regex@^1.0.2:
24692509
version "1.0.2"
24702510
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
@@ -2801,6 +2841,11 @@ doctrine@^3.0.0:
28012841
dependencies:
28022842
esutils "^2.0.2"
28032843

2844+
dom-accessibility-api@^0.5.9:
2845+
version "0.5.16"
2846+
resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453"
2847+
integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==
2848+
28042849
domexception@^4.0.0:
28052850
version "4.0.0"
28062851
resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
@@ -4204,6 +4249,16 @@ istanbul-reports@^3.1.3:
42044249
html-escaper "^2.0.0"
42054250
istanbul-lib-report "^3.0.0"
42064251

4252+
jest-axe@^7.0.0:
4253+
version "7.0.0"
4254+
resolved "https://registry.yarnpkg.com/jest-axe/-/jest-axe-7.0.0.tgz#0658629bdff87d50d35cb9eca66a9b462fb0092b"
4255+
integrity sha512-y+TH+GGH7zOYABWv5IrtGx4ove1dYcVg9Nv9pJZcqKQ+2goJCkAYoHAqergPaV/y9hh1Q9vZykjSXC/2U0Mjyg==
4256+
dependencies:
4257+
axe-core "4.5.1"
4258+
chalk "4.1.2"
4259+
jest-matcher-utils "29.2.2"
4260+
lodash.merge "4.6.2"
4261+
42074262
jest-changed-files@^29.4.3:
42084263
version "29.4.3"
42094264
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.4.3.tgz#7961fe32536b9b6d5c28dfa0abcfab31abcf50a7"
@@ -4283,7 +4338,7 @@ jest-config@^29.4.3:
42834338
slash "^3.0.0"
42844339
strip-json-comments "^3.1.1"
42854340

4286-
jest-diff@^29.4.3:
4341+
jest-diff@^29.2.1, jest-diff@^29.4.3:
42874342
version "29.4.3"
42884343
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.3.tgz#42f4eb34d0bf8c0fb08b0501069b87e8e84df347"
42894344
integrity sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==
@@ -4337,7 +4392,7 @@ jest-environment-node@^29.4.3:
43374392
jest-mock "^29.4.3"
43384393
jest-util "^29.4.3"
43394394

4340-
jest-get-type@^29.4.3:
4395+
jest-get-type@^29.2.0, jest-get-type@^29.4.3:
43414396
version "29.4.3"
43424397
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5"
43434398
integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==
@@ -4369,6 +4424,16 @@ jest-leak-detector@^29.4.3:
43694424
jest-get-type "^29.4.3"
43704425
pretty-format "^29.4.3"
43714426

4427+
4428+
version "29.2.2"
4429+
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.2.2.tgz#9202f8e8d3a54733266784ce7763e9a08688269c"
4430+
integrity sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw==
4431+
dependencies:
4432+
chalk "^4.0.0"
4433+
jest-diff "^29.2.1"
4434+
jest-get-type "^29.2.0"
4435+
pretty-format "^29.2.1"
4436+
43724437
jest-matcher-utils@^29.4.3:
43734438
version "29.4.3"
43744439
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz#ea68ebc0568aebea4c4213b99f169ff786df96a0"
@@ -4795,7 +4860,7 @@ [email protected]:
47954860
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
47964861
integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
47974862

4798-
lodash.merge@^4.6.2:
4863+
lodash.merge@4.6.2, lodash.merge@^4.6.2:
47994864
version "4.6.2"
48004865
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
48014866
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
@@ -4826,6 +4891,11 @@ lru-cache@^6.0.0:
48264891
dependencies:
48274892
yallist "^4.0.0"
48284893

4894+
lz-string@^1.4.4:
4895+
version "1.4.4"
4896+
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
4897+
integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==
4898+
48294899
magic-string@^0.25.2:
48304900
version "0.25.9"
48314901
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
@@ -5483,7 +5553,16 @@ prettier@^2.2.1:
54835553
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3"
54845554
integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==
54855555

5486-
pretty-format@^29.0.0, pretty-format@^29.4.3:
5556+
pretty-format@^27.0.2:
5557+
version "27.5.1"
5558+
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
5559+
integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
5560+
dependencies:
5561+
ansi-regex "^5.0.1"
5562+
ansi-styles "^5.0.0"
5563+
react-is "^17.0.1"
5564+
5565+
pretty-format@^29.0.0, pretty-format@^29.2.1, pretty-format@^29.4.3:
54875566
version "29.4.3"
54885567
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c"
54895568
integrity sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==
@@ -5574,6 +5653,11 @@ react-is@^16.13.1:
55745653
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
55755654
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
55765655

5656+
react-is@^17.0.1:
5657+
version "17.0.2"
5658+
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
5659+
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
5660+
55775661
react-shallow-renderer@^16.15.0:
55785662
version "16.15.0"
55795663
resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457"

0 commit comments

Comments
 (0)