Skip to content

Commit 087154c

Browse files
authored
Remove Recompose (#592)
* remove recompose * add migration guide * resolve test failures * add migration guide to readme * create local util of wrapDisplayName, revert changes to components * remove 'display'
1 parent bf5663e commit 087154c

File tree

7 files changed

+90
-102
lines changed

7 files changed

+90
-102
lines changed

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@launchpadlab/lp-components",
3-
"version": "8.0.0",
3+
"version": "8.1.0",
44
"engines": {
55
"node": "^18.12"
66
},
@@ -86,7 +86,6 @@
8686
"prettier": "^2.7.1",
8787
"react": "^17.0.0",
8888
"react-dom": "^17.0.0",
89-
"recompose": "^0.30.0",
9089
"redux": "^4.1.2",
9190
"regenerator-runtime": "^0.13.9",
9291
"sass": "^1.56.1",

src/utils/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ export {
1818
export { compose, omit, set, get } from 'lodash/fp'
1919

2020
export filterInvalidDOMProps from 'filter-invalid-dom-props'
21-
export wrapDisplayName from 'recompose/wrapDisplayName'
2221

2322
export cloudinaryUploader from '../forms/inputs/cloudinary-file-input/cloudinary-uploader'
2423

src/utils/local/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export stripNamespace from './strip-namespace'
88
export triggerOnKeys from './trigger-on-keys'
99
export KeyCodes from './key-codes'
1010
export useToggle from './use-toggle'
11+
export wrapDisplayName from './wrap-display-name'

src/utils/local/wrap-display-name.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Returns a new display name for a Component combining the Base Component name with the name of the HOC.
2+
3+
function wrapDisplayName(BaseComponent, hocName) {
4+
return `${hocName}(${getDisplayName(BaseComponent)})`
5+
}
6+
7+
// Helper
8+
9+
function getDisplayName(Component) {
10+
if (typeof Component === 'string') {
11+
return Component
12+
}
13+
14+
if (!Component) {
15+
return undefined
16+
}
17+
18+
return Component.displayName || Component.name || 'Component'
19+
}
20+
21+
export default wrapDisplayName

stories/dynamic-input.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import React, { Component } from 'react'
2-
import wrapDisplayName from 'recompose/wrapDisplayName'
3-
import set from 'lodash/fp/set'
4-
import get from 'lodash/fp/get'
5-
import noop from 'lodash/noop'
6-
import compose from 'lodash/fp/compose'
2+
import { wrapDisplayName, set, get, noop, compose } from '../src/utils'
73

84
// From redux-form
95
const isEvent = (obj) => !!(obj && obj.stopPropagation && obj.preventDefault)

test/utils/wrap-display-name.test.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import React from 'react'
2+
import { wrapDisplayName } from '../../src/utils'
3+
4+
describe('Wrap Display Name', () => {
5+
test('wraps the name of a React component with the name of an HoC', () => {
6+
class SomeComponent extends React.Component {
7+
render() {
8+
return <div />
9+
}
10+
}
11+
12+
expect(wrapDisplayName(SomeComponent, 'someHoC')).toBe(
13+
'someHoC(SomeComponent)'
14+
)
15+
})
16+
17+
test('wraps the modified display name of a React component with the name of an HoC', () => {
18+
class SomeComponent extends React.Component {
19+
render() {
20+
return <div />
21+
}
22+
}
23+
24+
SomeComponent.displayName = 'SomeOtherComponent'
25+
26+
expect(wrapDisplayName(SomeComponent, 'someHoC')).toBe(
27+
'someHoC(SomeOtherComponent)'
28+
)
29+
})
30+
31+
test('wraps the name of a React component with no display name with the name of an HoC', () => {
32+
class SomeComponent extends React.Component {
33+
render() {
34+
return <div />
35+
}
36+
}
37+
38+
SomeComponent.displayName = null
39+
40+
expect(wrapDisplayName(SomeComponent, 'someHoC')).toBe(
41+
'someHoC(SomeComponent)'
42+
)
43+
})
44+
45+
test('wraps the string name of a component with the name of an HoC', () => {
46+
expect(wrapDisplayName('SomeComponent', 'someHoC')).toBe(
47+
'someHoC(SomeComponent)'
48+
)
49+
})
50+
51+
test("wraps 'undefined' with the name of an HoC if the Component is falsey", () => {
52+
const SomeComponent = null
53+
54+
expect(wrapDisplayName(SomeComponent, 'someHoC')).toBe('someHoC(undefined)')
55+
})
56+
57+
test("wraps 'Component' with the name of an HoC if the Component has no displayName or name values", () => {
58+
expect(wrapDisplayName(React.Component, 'someHoC')).toBe(
59+
'someHoC(Component)'
60+
)
61+
})
62+
})

yarn.lock

Lines changed: 4 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -3955,11 +3955,6 @@ arrify@^2.0.1:
39553955
resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
39563956
integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
39573957

3958-
asap@~2.0.3:
3959-
version "2.0.6"
3960-
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
3961-
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
3962-
39633958
asn1.js@^5.2.0:
39643959
version "5.4.1"
39653960
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
@@ -4796,11 +4791,6 @@ chalk@^4.0.0, chalk@^4.1.0:
47964791
ansi-styles "^4.1.0"
47974792
supports-color "^7.1.0"
47984793

4799-
change-emitter@^0.1.2:
4800-
version "0.1.6"
4801-
resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
4802-
integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=
4803-
48044794
character-entities-html4@^1.0.0:
48054795
version "1.1.3"
48064796
resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef"
@@ -5484,11 +5474,6 @@ core-js-pure@^3.23.3:
54845474
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.1.tgz#653f4d7130c427820dcecd3168b594e8bb095a33"
54855475
integrity sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==
54865476

5487-
core-js@^1.0.0:
5488-
version "1.2.7"
5489-
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
5490-
integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
5491-
54925477
core-js@^3.0.4, core-js@^3.21.1, core-js@^3.6.5, core-js@^3.8.2:
54935478
version "3.26.1"
54945479
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e"
@@ -6273,13 +6258,6 @@ encodeurl@~1.0.2:
62736258
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
62746259
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
62756260

6276-
encoding@^0.1.11:
6277-
version "0.1.12"
6278-
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
6279-
integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
6280-
dependencies:
6281-
iconv-lite "~0.4.13"
6282-
62836261
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
62846262
version "1.4.4"
62856263
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -7173,19 +7151,6 @@ fb-watchman@^2.0.0:
71737151
dependencies:
71747152
bser "2.1.1"
71757153

7176-
fbjs@^0.8.1:
7177-
version "0.8.17"
7178-
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
7179-
integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
7180-
dependencies:
7181-
core-js "^1.0.0"
7182-
isomorphic-fetch "^2.1.1"
7183-
loose-envify "^1.0.0"
7184-
object-assign "^4.1.0"
7185-
promise "^7.1.1"
7186-
setimmediate "^1.0.5"
7187-
ua-parser-js "^0.7.18"
7188-
71897154
fetch-retry@^5.0.2:
71907155
version "5.0.3"
71917156
resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.3.tgz#edfa3641892995f9afee94f25b168827aa97fe3d"
@@ -8092,11 +8057,6 @@ hmac-drbg@^1.0.1:
80928057
minimalistic-assert "^1.0.0"
80938058
minimalistic-crypto-utils "^1.0.1"
80948059

8095-
hoist-non-react-statics@^2.3.1:
8096-
version "2.5.5"
8097-
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
8098-
integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
8099-
81008060
hosted-git-info@^2.1.4:
81018061
version "2.8.9"
81028062
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
@@ -8271,7 +8231,7 @@ husky@^7.0.4:
82718231
resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535"
82728232
integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==
82738233

8274-
iconv-lite@0.4.24, iconv-lite@~0.4.13:
8234+
iconv-lite@0.4.24:
82758235
version "0.4.24"
82768236
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
82778237
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -8773,7 +8733,7 @@ is-ssh@^1.3.0:
87738733
dependencies:
87748734
protocols "^1.1.0"
87758735

8776-
is-stream@^1.0.1, is-stream@^1.1.0:
8736+
is-stream@^1.1.0:
87778737
version "1.1.0"
87788738
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
87798739
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -8919,14 +8879,6 @@ isobject@^4.0.0:
89198879
resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0"
89208880
integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==
89218881

8922-
isomorphic-fetch@^2.1.1:
8923-
version "2.2.1"
8924-
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
8925-
integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
8926-
dependencies:
8927-
node-fetch "^1.0.1"
8928-
whatwg-fetch ">=0.10.0"
8929-
89308882
isomorphic-unfetch@^3.1.0:
89318883
version "3.1.0"
89328884
resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f"
@@ -10694,14 +10646,6 @@ node-dir@^0.1.10:
1069410646
dependencies:
1069510647
minimatch "^3.0.2"
1069610648

10697-
node-fetch@^1.0.1:
10698-
version "1.7.3"
10699-
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
10700-
integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
10701-
dependencies:
10702-
encoding "^0.1.11"
10703-
is-stream "^1.0.1"
10704-
1070510649
node-fetch@^2.6.1, node-fetch@^2.6.7:
1070610650
version "2.6.7"
1070710651
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
@@ -11817,13 +11761,6 @@ promise.prototype.finally@^3.1.0:
1181711761
define-properties "^1.1.4"
1181811762
es-abstract "^1.20.4"
1181911763

11820-
promise@^7.1.1:
11821-
version "7.3.1"
11822-
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
11823-
integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
11824-
dependencies:
11825-
asap "~2.0.3"
11826-
1182711764
prompts@^2.0.1, prompts@^2.4.0:
1182811765
version "2.4.2"
1182911766
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
@@ -12140,7 +12077,7 @@ react-is@^16.12.0, react-is@^16.13.1:
1214012077
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
1214112078
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
1214212079

12143-
react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.2:
12080+
react-lifecycles-compat@^3.0.0:
1214412081
version "3.0.4"
1214512082
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
1214612083
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
@@ -12391,18 +12328,6 @@ realpath-native@^2.0.0:
1239112328
resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866"
1239212329
integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==
1239312330

12394-
recompose@^0.30.0:
12395-
version "0.30.0"
12396-
resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0"
12397-
integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==
12398-
dependencies:
12399-
"@babel/runtime" "^7.0.0"
12400-
change-emitter "^0.1.2"
12401-
fbjs "^0.8.1"
12402-
hoist-non-react-statics "^2.3.1"
12403-
react-lifecycles-compat "^3.0.2"
12404-
symbol-observable "^1.0.4"
12405-
1240612331
redent@^1.0.0:
1240712332
version "1.0.0"
1240812333
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
@@ -13143,7 +13068,7 @@ set-value@^2.0.0, set-value@^2.0.1:
1314313068
is-plain-object "^2.0.3"
1314413069
split-string "^3.0.1"
1314513070

13146-
setimmediate@^1.0.4, setimmediate@^1.0.5:
13071+
setimmediate@^1.0.4:
1314713072
version "1.0.5"
1314813073
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
1314913074
integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
@@ -13842,11 +13767,6 @@ supports-preserve-symlinks-flag@^1.0.0:
1384213767
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
1384313768
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1384413769

13845-
symbol-observable@^1.0.4:
13846-
version "1.2.0"
13847-
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
13848-
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
13849-
1385013770
symbol-tree@^3.2.2:
1385113771
version "3.2.4"
1385213772
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
@@ -14309,11 +14229,6 @@ typedarray@^0.0.6, typedarray@~0.0.5:
1430914229
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1431014230
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
1431114231

14312-
ua-parser-js@^0.7.18:
14313-
version "0.7.20"
14314-
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098"
14315-
integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==
14316-
1431714232
uglify-js@^3.1.4:
1431814233
version "3.17.4"
1431914234
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
@@ -14985,11 +14900,6 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5:
1498514900
dependencies:
1498614901
iconv-lite "0.4.24"
1498714902

14988-
whatwg-fetch@>=0.10.0:
14989-
version "3.0.0"
14990-
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
14991-
integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
14992-
1499314903
whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
1499414904
version "2.3.0"
1499514905
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"

0 commit comments

Comments
 (0)