date-fns#addMilliseconds TypeScript Examples
The following examples show how to use
date-fns#addMilliseconds.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: nights.ts From nyxo-app with GNU General Public License v3.0 | 6 votes |
getNightsAsDays = createSelector(getNights, (nights) => {
const days = eachDayOfInterval({
start: subDays(new Date(), 30),
end: new Date() // lastDate
})
return days.map((day) => ({
date: day.toISOString(),
inBedDuration: 0,
asleepDuration: 0,
night: nights
.filter((night) => matchDayAndNight(night.startDate, day.toISOString()))
.map((night) => {
const startDifference = differenceInMilliseconds(
new Date(night.startDate),
startOfDay(new Date(day))
)
const newStartDate = addMilliseconds(
startOfDay(new Date()),
startDifference
)
const newEndDate = addMinutes(newStartDate, night.totalDuration)
return {
...night,
startDate: newStartDate.valueOf(),
endDate: newEndDate.valueOf()
}
})
}))
})
Example #2
Source File: SleepChart.tsx From nyxo-website with MIT License | 6 votes |
getNightAsDays = (nights: Night[]) => {
const firstDate = min([...nights.map((night) => new Date(night.startDate))])
const lastDate = max([...nights.map((night) => new Date(night.endDate))])
const days = eachDayOfInterval({
start: subDays(new Date(), 30),
end: new Date(), // lastDate
})
return days.map((day) => ({
date: day.toISOString(),
night: nights
.filter((night) => matchDayAndNight(night.startDate, day.toISOString()))
.map((night) => {
const startDifference = differenceInMilliseconds(
new Date(night.startDate),
startOfDay(new Date(day))
)
const newStartDate = addMilliseconds(
startOfDay(new Date()),
startDifference
)
const newEndDate = addMinutes(newStartDate, night.totalDuration)
return {
...night,
startDate: newStartDate.valueOf(),
endDate: newEndDate.valueOf(),
}
}),
}))
}
Example #3
Source File: NftForm.tsx From atlas with GNU General Public License v3.0 | 4 votes |
NftForm: React.FC<NftFormProps> = ({ setFormStatus, onSubmit, videoId }) => {
const { activeMembership } = useUser()
const scrollableWrapperRef = useRef<HTMLDivElement>(null)
const {
state: { activeInputs, setActiveInputs, listingType, setListingType, currentStep, previousStep, nextStep },
} = useNftForm()
const { chainState } = useNftFormUtils()
const { convertMsTimestampToBlock, convertBlocksToDuration } = useBlockTimeEstimation()
const isOnFirstStep = currentStep === 0
const isOnLastStep = currentStep === 2
const maxStartDate = addMilliseconds(new Date(), convertBlocksToDuration(chainState.nftAuctionStartsAtMaxDelta))
const maxEndDate = addMilliseconds(new Date(), convertBlocksToDuration(chainState.nftMaxAuctionDuration))
const formMethods = useForm<NftFormFields>({
mode: 'onChange',
resolver: (data, ctx, options) => {
const resolver = zodResolver(
createValidationSchema(data, maxStartDate, maxEndDate, listingType, chainState.nftMinStartingPrice)
)
return resolver(data, ctx, options)
},
reValidateMode: 'onChange',
defaultValues: {
startDate: null,
endDate: null,
startingPrice: chainState.nftMinStartingPrice || undefined,
},
})
const {
handleSubmit: createSubmitHandler,
reset,
getValues,
setValue,
watch,
trigger,
formState: { isValid },
} = formMethods
const { video, loading: loadingVideo } = useVideo(videoId, { fetchPolicy: 'cache-only' })
const { url: channelAvatarUrl } = useAsset(video?.channel.avatarPhoto)
const { url: thumbnailPhotoUrl } = useAsset(video?.thumbnailPhoto)
const { url: memberAvatarUri } = useMemberAvatar(activeMembership)
const [openModal, closeModal] = useConfirmationModal()
const handleSubmit = useCallback(() => {
const startDateValue = getValues('startDate')
const startDate = startDateValue?.type === 'date' && startDateValue.date
if (startDate && new Date() > startDate) {
trigger('startDate')
// the start date is in the past, abort the submit and show a modal
openModal({
title: 'Start sale now?',
children: (
<Text variant="t200" secondary>
The start date <Text variant="t200">{formatDateTime(startDate)} </Text> you selected has already passed. Do
you want to put your NFT on sale now?
</Text>
),
primaryButton: {
variant: 'primary',
size: 'large',
text: 'Start sale now',
onClick: () => {
setValue('startDate', null)
closeModal()
handleSubmit()
},
},
secondaryButton: {
variant: 'secondary',
size: 'large',
text: 'Cancel',
onClick: () => {
previousStep()
closeModal()
},
},
})
return
}
const handler = createSubmitHandler((data) => {
if (listingType === 'Fixed price') {
if (!data.buyNowPrice) {
SentryLogger.error('Missing buy now price for fixed price NFT', 'NftForm', null, {
form: { data, listingType },
})
return
}
onSubmit({
type: 'buyNow',
buyNowPrice: data.buyNowPrice,
})
} else if (listingType === 'Auction') {
const startsAtBlock = startDate ? convertMsTimestampToBlock(startDate.getTime()) : undefined
const startingPrice = data.startingPrice || chainState.nftMinStartingPrice
const minimalBidStep = Math.ceil(startingPrice * NFT_MIN_BID_STEP_MULTIPLIER)
if (data.auctionDurationBlocks) {
// auction has duration, assume english
onSubmit({
type: 'english',
startsAtBlock,
startingPrice,
minimalBidStep,
buyNowPrice: data.buyNowPrice || undefined,
auctionDurationBlocks: data.auctionDurationBlocks,
whitelistedMembersIds: data.whitelistedMembers?.map((member) => member.id),
})
} else {
// auction has no duration, assume open
onSubmit({
type: 'open',
startsAtBlock,
startingPrice,
minimalBidStep,
buyNowPrice: data.buyNowPrice || undefined,
whitelistedMembersIds: data.whitelistedMembers?.map((member) => member.id),
})
}
} else {
SentryLogger.error('Unknown listing type', 'NftForm', null, {
form: { data, listingType },
})
}
})
return handler()
}, [
chainState.nftMinStartingPrice,
closeModal,
convertMsTimestampToBlock,
createSubmitHandler,
getValues,
listingType,
onSubmit,
openModal,
previousStep,
setValue,
trigger,
])
const handleGoForward = useCallback(() => {
scrollableWrapperRef.current?.scrollIntoView()
if (isOnLastStep) return
nextStep()
}, [isOnLastStep, nextStep])
const handleGoBack = useCallback(() => {
if (isOnFirstStep) return
scrollableWrapperRef.current?.scrollIntoView()
previousStep()
}, [isOnFirstStep, previousStep])
const formDisabled = useMemo(() => {
if (currentStep === 0) {
return !listingType
}
if (currentStep === 1) {
return !isValid
}
return false
}, [currentStep, isValid, listingType])
const formStatus: NftFormStatus = useMemo(
() => ({
isValid,
isDisabled: formDisabled,
canGoBack: !isOnFirstStep,
canGoForward: !isOnLastStep,
triggerGoBack: handleGoBack,
triggerGoForward: handleGoForward,
triggerSubmit: handleSubmit,
}),
[isValid, formDisabled, isOnFirstStep, isOnLastStep, handleGoBack, handleGoForward, handleSubmit]
)
// sent updates on form status to VideoWorkspace
useEffect(() => {
setFormStatus(formStatus)
}, [formStatus, setFormStatus])
// Clear form on listing type change
useEffect(() => {
reset()
if (listingType === 'Fixed price') {
setTimeout(() => {
setValue('buyNowPrice', 1)
})
}
setActiveInputs([])
}, [listingType, reset, setActiveInputs, setValue])
const getNftStatus = () => {
switch (listingType) {
case 'Fixed price':
return 'buy-now'
case 'Auction':
return 'auction'
default:
return 'idle'
}
}
const nftTileProps: NftTileProps = {
status: getNftStatus(),
thumbnail: { thumbnailUrl: thumbnailPhotoUrl },
title: video?.title,
owner: { assetUrl: memberAvatarUri, name: activeMembership?.handle },
creator: { assetUrl: channelAvatarUrl, name: video?.channel.title ?? '' },
loading: loadingVideo,
duration: video?.duration,
views: video?.views,
buyNowPrice: watch('buyNowPrice') || 0,
startingPrice: watch('startingPrice') || 0,
}
const stepsContent = [
<ListingType key="step-content-1" selectedType={listingType} onSelectType={setListingType} />,
<SetUp
maxStartDate={maxStartDate}
maxEndDate={maxEndDate}
key="step-content-2"
selectedType={listingType}
activeInputs={activeInputs}
setActiveInputs={setActiveInputs}
handleGoForward={handleGoForward}
/>,
<AcceptTerms key="step-content-3" selectedType={listingType} formData={getValues()} />,
]
return (
<ScrollableWrapper ref={scrollableWrapperRef}>
<NftWorkspaceFormWrapper>
<NftPreview>
<NftTile interactable={false} {...nftTileProps} />
<Text margin={{ top: 4 }} variant="h100" secondary>
Your nft preview
</Text>
</NftPreview>
<NftFormScrolling>
<FormProvider {...formMethods}>
<NftFormWrapper lastStep={currentStep === 2}>
<StepperWrapper>
<StepperInnerWrapper>
{issueNftSteps.map((step, idx) => {
const stepVariant = getStepVariant(currentStep, idx)
const isLast = idx === issueNftSteps.length - 1
return (
<StepWrapper key={idx}>
<Step showOtherStepsOnMobile number={idx + 1} variant={stepVariant} title={step.title} />
{!isLast && <SvgActionChevronR />}
</StepWrapper>
)
})}
</StepperInnerWrapper>
</StepperWrapper>
{stepsContent[currentStep]}
</NftFormWrapper>
</FormProvider>
</NftFormScrolling>
</NftWorkspaceFormWrapper>
</ScrollableWrapper>
)
}