-
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
386 - Refactor MoveToDatasetButton / MoveToDatasetModal components #435
Open
nozomione
wants to merge
14
commits into
dev
Choose a base branch
from
nozomione/386-refactor-move-to-dataset-button-and-modal-components
base: dev
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+107
−103
Open
Changes from all commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
ca67726
(edit) add a new 'acceptedTerms' context state and user token validat…
nozomione 6b50dd3
(edit) adjust the components (download forms) that utilize the token
nozomione d9324f8
Merge branch 'dev' into nozomione/413-update-token-validation-flow
nozomione 60f2d49
(edit) add 404 check in validateToken, and add a new method activateT…
nozomione 50532a7
Merge 'dev' branch into nozomione/413-update-token-validation-flow
nozomione a269813
(edit) add an application token (generate the user token on inital us…
nozomione 1defad3
(edit) adjust consumer components (for form submission and the terms …
nozomione 6fe6e31
(edit) use accetedTerms and its setter in consumer components (remove…
nozomione f4f48b9
(edit) replace useTriggerSubmit with useWaitFor and adjust components…
nozomione caa9d24
(edit) add the trailing slash using template strings and rename 'url'…
nozomione 97e6143
(edit) use an early return to handle the case of no samples in myData…
nozomione 37947bf
Merge 'dev' branch into nozomione/386-refactor-move-to-dataset-button…
nozomione 6f4d98d
(minor) rename 'handleRedirect' to 'getRedirect' in MoveToDatasetButton
nozomione ce760b5
Merge branch 'dev' into nozomione/386-refactor-move-to-dataset-button…
nozomione File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,74 +1,69 @@ | ||||||||||||||||||||||||||||||||||||
import { useState } from 'react' | ||||||||||||||||||||||||||||||||||||
import { useRouter } from 'next/router' | ||||||||||||||||||||||||||||||||||||
import { useDatasetManager } from 'hooks/useDatasetManager' | ||||||||||||||||||||||||||||||||||||
import { useModal } from 'hooks/useModal' | ||||||||||||||||||||||||||||||||||||
import formatNumbers from 'helpers/formatNumbers' | ||||||||||||||||||||||||||||||||||||
import { Button } from 'components/shared/Button' | ||||||||||||||||||||||||||||||||||||
import { Button as SharedButton } from 'components/shared/Button' | ||||||||||||||||||||||||||||||||||||
import { Modal } from 'components/shared/Modal' | ||||||||||||||||||||||||||||||||||||
import { MoveToDatasetModal } from './MoveToDatasetModal' | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const Button = ({ onClick }) => ( | ||||||||||||||||||||||||||||||||||||
<SharedButton | ||||||||||||||||||||||||||||||||||||
label="Move to Dataset" | ||||||||||||||||||||||||||||||||||||
secondary | ||||||||||||||||||||||||||||||||||||
responsive | ||||||||||||||||||||||||||||||||||||
onClick={onClick} | ||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
export const MoveToDatasetButton = ({ dataset }) => { | ||||||||||||||||||||||||||||||||||||
const { push } = useRouter() | ||||||||||||||||||||||||||||||||||||
const { openModal, closeModal } = useModal() | ||||||||||||||||||||||||||||||||||||
const modalId = `move-to-dataset-${dataset.id}` | ||||||||||||||||||||||||||||||||||||
const { | ||||||||||||||||||||||||||||||||||||
dataset: myDataset, | ||||||||||||||||||||||||||||||||||||
addSamples, | ||||||||||||||||||||||||||||||||||||
getTotalSamples | ||||||||||||||||||||||||||||||||||||
getTotalSamples, | ||||||||||||||||||||||||||||||||||||
replaceSamples | ||||||||||||||||||||||||||||||||||||
} = useDatasetManager() | ||||||||||||||||||||||||||||||||||||
const { openModal, closeModal } = useModal() | ||||||||||||||||||||||||||||||||||||
const id = `move-to-dataset-${dataset.id}` | ||||||||||||||||||||||||||||||||||||
const radioOptions = [ | ||||||||||||||||||||||||||||||||||||
{ label: 'Append samples to My Dataset', value: 'append' }, | ||||||||||||||||||||||||||||||||||||
{ label: 'Replace samples in My Dataset', value: 'replace' } | ||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||
const defaultValue = radioOptions[0].value | ||||||||||||||||||||||||||||||||||||
const [value, setValue] = useState(defaultValue) | ||||||||||||||||||||||||||||||||||||
const newTotalSamples = getTotalSamples(dataset.data) | ||||||||||||||||||||||||||||||||||||
const totalSamples = getTotalSamples(myDataset?.data) | ||||||||||||||||||||||||||||||||||||
const pathname = '/download' | ||||||||||||||||||||||||||||||||||||
const myDatasetTotalSamples = getTotalSamples(myDataset?.data) | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const getRedirect = (prefix) => { | ||||||||||||||||||||||||||||||||||||
push({ | ||||||||||||||||||||||||||||||||||||
pathname: '/download', | ||||||||||||||||||||||||||||||||||||
query: { | ||||||||||||||||||||||||||||||||||||
message: `${prefix} ${formatNumbers( | ||||||||||||||||||||||||||||||||||||
getTotalSamples(dataset.data) // display the shared dataset total samples | ||||||||||||||||||||||||||||||||||||
)} samples to My Dataset`, | ||||||||||||||||||||||||||||||||||||
status: 'success' | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const handleMoveToDataset = async () => { | ||||||||||||||||||||||||||||||||||||
if (totalSamples > 0) { | ||||||||||||||||||||||||||||||||||||
openModal(id) | ||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||
await addSamples(dataset.data) | ||||||||||||||||||||||||||||||||||||
push( | ||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||
pathname, | ||||||||||||||||||||||||||||||||||||
query: { | ||||||||||||||||||||||||||||||||||||
message: `Appended ${formatNumbers( | ||||||||||||||||||||||||||||||||||||
newTotalSamples | ||||||||||||||||||||||||||||||||||||
)} samples to My Dataset`, | ||||||||||||||||||||||||||||||||||||
status: 'success' | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||
pathname | ||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
const handleAppend = async () => { | ||||||||||||||||||||||||||||||||||||
await addSamples(dataset.data) | ||||||||||||||||||||||||||||||||||||
getRedirect('Appended') | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const handleReplace = async () => { | ||||||||||||||||||||||||||||||||||||
await replaceSamples(dataset.data) | ||||||||||||||||||||||||||||||||||||
getRedirect('Moved') | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
Comment on lines
+47
to
+50
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
// if no samples in myDataset, add shared samples on click without opening modal | ||||||||||||||||||||||||||||||||||||
if (myDatasetTotalSamples === 0) { | ||||||||||||||||||||||||||||||||||||
return <Button onClick={handleAppend} /> | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||||||||||||||
<Modal | ||||||||||||||||||||||||||||||||||||
id={id} | ||||||||||||||||||||||||||||||||||||
button={ | ||||||||||||||||||||||||||||||||||||
<Button | ||||||||||||||||||||||||||||||||||||
label="Move to Dataset" | ||||||||||||||||||||||||||||||||||||
secondary | ||||||||||||||||||||||||||||||||||||
responsive | ||||||||||||||||||||||||||||||||||||
onClick={handleMoveToDataset} | ||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
id={modalId} | ||||||||||||||||||||||||||||||||||||
button={<Button onClick={() => openModal(modalId)} />} | ||||||||||||||||||||||||||||||||||||
fullHeight={false} | ||||||||||||||||||||||||||||||||||||
cleanUp={() => setValue(defaultValue)} | ||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||
<MoveToDatasetModal | ||||||||||||||||||||||||||||||||||||
id={id} | ||||||||||||||||||||||||||||||||||||
closeModal={closeModal} | ||||||||||||||||||||||||||||||||||||
defaultValue={defaultValue} | ||||||||||||||||||||||||||||||||||||
dataset={dataset} | ||||||||||||||||||||||||||||||||||||
pathname={pathname} | ||||||||||||||||||||||||||||||||||||
radioOptions={radioOptions} | ||||||||||||||||||||||||||||||||||||
value={value} | ||||||||||||||||||||||||||||||||||||
setValue={setValue} | ||||||||||||||||||||||||||||||||||||
onAppend={handleAppend} | ||||||||||||||||||||||||||||||||||||
onReplace={handleReplace} | ||||||||||||||||||||||||||||||||||||
onCloseModal={() => closeModal(modalId)} | ||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||
</Modal> | ||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
import { useEffect, useRef } from 'react' | ||
|
||
export const useWaitFor = (condition) => { | ||
const resolveRef = useRef(null) | ||
const promiseRef = useRef(null) | ||
const latestConditionRef = useRef(condition) | ||
const isPromiseInitialized = useRef(false) | ||
|
||
const setupPromise = () => { | ||
if (isPromiseInitialized.current) return | ||
promiseRef.current = new Promise((resolve) => { | ||
resolveRef.current = resolve | ||
}) | ||
|
||
isPromiseInitialized.current = true | ||
} | ||
|
||
// initialize the promise when condition changes | ||
useEffect(() => { | ||
if (condition) { | ||
setupPromise() | ||
resolveRef.current() | ||
} | ||
|
||
latestConditionRef.current = condition | ||
}, [condition]) | ||
|
||
return (cb) => { | ||
return async (...args) => { | ||
// ensure promise is initialized before executing callback | ||
if (!isPromiseInitialized.current) { | ||
setupPromise() | ||
} | ||
|
||
await promiseRef.current | ||
return cb(...args, latestConditionRef.current) | ||
} | ||
} | ||
} |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.