# Code Review (CCO) ### utils/cco.js https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/utils/cco.js#L97 - Nested ternary. https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/utils/cco.js#L104 - This is looks like a side effect. Would probably be best to find overTime separately without reassigning. https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/utils/cco.js#L111 - I'm seeing ``total / 10 ** Number(args.round.ccoToken.decimals)`` repeated a lot through this doc. I think there's a utility for this somewhere in general.js. If not, or you need a CCO specific fn, would probably be good to make one. ### pages/DaosquareCco.jsx https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/pages/DaosquareCco.jsx#L8 - It's contexts before components, right? https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/pages/DaosquareCco.jsx#L52 - Is there a way to do this in the context? Would probably be better not to run sort for every render. ### components/daosquareCcoOverall.jsx https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/daosquareCcoOverall.jsx#L2 - Spacing for imports ### components/ccoCard.jsx https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/ccoCard.jsx#L7 - Spacing between components/utils ### contexts/DaosquareCcoContext.jsx https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/contexts/DaosquareCcoContext.jsx#L2 - import spacing ### pages/CcoContribution.jsx https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/pages/CcoContribution.jsx#L4 - Some imports out of place here. ### components/ccoElibility.jsx https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/ccoElibility.jsx#L6 - Same here. https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/ccoElibility.jsx#L130 - Unary https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/ccoElibility.jsx#L86 - Nested ternary. Should probably refactor some of these to small stateless components. ### components/ccoContributeCard.jsx - Imports https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/ccoContributeCard.jsx#L80 - Curious about hard-coding the proposal id to 157 here. There's probably a reason, but I'm just making sure nothing got left out. - needs update - see nan in display http://localhost:3000/dao/0x64/0x815aa1d90bcf6535bba894db67c49cd34f5cfc66/cco ### forms/ccoLootGrab.jsx - Imports https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/ccoLootGrab.jsx#L200 - A pretty readable nested ternary, but still a nested ternary ### forms/ccoTributeInput.jsx - Imports https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/ccoTributeInput.jsx#L21 - State/hooks are out of order. https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/ccoTributeInput.jsx#L42 - Should use spread instead of unshift (ex. [token, ...tokenArray]) to prevent obj mutations. https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/ccoTributeInput.jsx#L178 - Number() instead of '+' for type coercion ### components/ccoClaimCard.jsx - Imports https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/ccoClaimCard.jsx#L21 - This is a good use case for useMemo https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/ccoClaimCard.jsx#L76 - Unary ### forms/ccoClaim.jsx - Imports - State/hook order https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/ccoClaim.jsx#L44 - Include daoMember in deps array - Check daoMember exists. Currently we're setting can rage to true even if daoMember is undefined. https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/ccoClaim.jsx#L100 - constants go above fns now, right? ### components/ccoResources.jsx - Imports ### pages/CcoAdmin.jsx https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/pages/CcoAdmin.jsx#L21 - No try/catch here on fetchTransmutation. Graphquery has one though. Might be good to have one in fetchTransmutation? ### forms/ccoConfig.jsx https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/ccoConfig.jsx#L168 - don't need to use anon callback here. Can stash 'cco' or 'daosquarecco' in button value attribute and get in the fn with e.target.value ### forms/ccoWhitelist.jsx - State/hooks order https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/ccoWhitelist.jsx#L126 - No need for anon callback fn. onChange={handleFileSet} works the same. https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/ccoWhitelist.jsx#L112 - Same here. ### forms/ccoActivate.jsx - state/hooks order ### components/ccoTransmutation.jsx - imports order - state/hooks order https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/ccoTransmutation.jsx#L17 - This only selects the first vanilla minion. Would we want to be able to select a particular minion. https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/components/ccoTransmutation.jsx#L49 - Nested ternary (readable, but probably good to change to keep code consistent) ### forms/newTransmutation.jsx - Imports order - state/hooks order https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/newTransmutation.jsx#L41 - Doesn't need to be async https://github.com/HausDAO/pokemol-web/blob/0f910d4ff56b16c767679319821092c6afb9f127/src/forms/newTransmutation.jsx#L226 - Should be unary - same for other steps.