[breaking]: FreeSewing v4 (#7297)
Refer to the CHANGELOG for all info. --------- Co-authored-by: Wouter van Wageningen <wouter.vdub@yahoo.com> Co-authored-by: Josh Munic <jpmunic@gmail.com> Co-authored-by: Jonathan Haas <haasjona@gmail.com>
This commit is contained in:
parent
d22fbe78d9
commit
51dc1d9732
6626 changed files with 142053 additions and 150606 deletions
46
packages/react/hooks/useControl/index.mjs
Normal file
46
packages/react/hooks/useControl/index.mjs
Normal file
|
@ -0,0 +1,46 @@
|
|||
// Context
|
||||
import { LoadingStatusContext } from '@freesewing/react/context/LoadingStatus'
|
||||
|
||||
// Hooks
|
||||
import React, { useState, useContext } from 'react'
|
||||
import { useAccount } from '@freesewing/react/hooks/useAccount'
|
||||
import { useBackend } from '@freesewing/react/hooks/useBackend'
|
||||
|
||||
/**
|
||||
* Control can be updated from many places in the UI.
|
||||
* So this shared state handler keeps this DRY
|
||||
*/
|
||||
export const useControl = () => {
|
||||
// Hooks
|
||||
const backend = useBackend()
|
||||
const { account, setAccount, token } = useAccount()
|
||||
const { setLoadingStatus } = useContext(LoadingStatusContext)
|
||||
|
||||
// State
|
||||
const [control, setControl] = useState(account.control)
|
||||
|
||||
// Method to update the control setting
|
||||
const updateControl = async (newControl) => {
|
||||
if (newControl !== control) {
|
||||
if (token) {
|
||||
setLoadingStatus([true, 'Updating preferences'])
|
||||
const [status, body] = await backend.updateAccount({ control: newControl })
|
||||
if (status === 200) {
|
||||
setControl(newControl)
|
||||
setAccount(body.account)
|
||||
setLoadingStatus([true, 'Preferences updated', true, true])
|
||||
} else
|
||||
setLoadingStatus([true, 'Failed to update preferences. Please report this', true, true])
|
||||
} else {
|
||||
/*
|
||||
* Control is used even when people are not logged in
|
||||
* So this ensures control is always available, even if people are not authenticated
|
||||
*/
|
||||
setAccount({ ...account, control: newControl })
|
||||
setControl(newControl)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return { control, updateControl }
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue