| 1 |
import { Button } from '@wordpress/components' |
| 2 |
import { useState } from '@wordpress/element' |
| 3 |
import { useIsDevMode } from '@library/hooks/helpers' |
| 4 |
import { useGlobalStore } from '@library/state/GlobalState' |
| 5 |
import { useTaxonomyStore } from '@library/state/Taxonomies' |
| 6 |
import { useTemplatesStore } from '@library/state/Templates' |
| 7 |
import { useUserStore } from '@library/state/User' |
| 8 |
|
| 9 |
export const DevSettings = () => { |
| 10 |
const [processing, setProcessing] = useState(false) |
| 11 |
const [canHydrate, setCanHydrate] = useState(false) |
| 12 |
const devMode = useIsDevMode() |
| 13 |
|
| 14 |
const handleReset = async () => { |
| 15 |
if (processing) return |
| 16 |
setProcessing(true) |
| 17 |
if (canHydrate) { |
| 18 |
setCanHydrate(false) |
| 19 |
useUserStore.setState({ |
| 20 |
participatingTestsGroups: [], |
| 21 |
}) |
| 22 |
await useUserStore.persist.rehydrate() |
| 23 |
window.extendifyData._canRehydrate = false |
| 24 |
setProcessing(false) |
| 25 |
return |
| 26 |
} |
| 27 |
useUserStore.persist.clearStorage() |
| 28 |
useGlobalStore.persist.clearStorage() |
| 29 |
await new Promise((resolve) => setTimeout(resolve, 1000)) |
| 30 |
window.extendifyData._canRehydrate = true |
| 31 |
setCanHydrate(true) |
| 32 |
setProcessing(false) |
| 33 |
} |
| 34 |
|
| 35 |
const handleServerSwitch = async () => { |
| 36 |
const params = new URLSearchParams(window.location.search) |
| 37 |
params.delete('LOCALMODE', 1) |
| 38 |
params[params.has('DEVMODE') || devMode ? 'delete' : 'append']( |
| 39 |
'DEVMODE', |
| 40 |
1, |
| 41 |
) |
| 42 |
window.history.replaceState( |
| 43 |
null, |
| 44 |
null, |
| 45 |
window.location.pathname + '?' + params.toString(), |
| 46 |
) |
| 47 |
await new Promise((resolve) => setTimeout(resolve, 500)) |
| 48 |
window.dispatchEvent(new Event('popstate')) |
| 49 |
useTemplatesStore.getState().resetTemplates() |
| 50 |
useTemplatesStore.getState().updateSearchParams({}) |
| 51 |
useTaxonomyStore.persist.clearStorage() |
| 52 |
useTaxonomyStore.persist.rehydrate() |
| 53 |
useTemplatesStore.setState({ |
| 54 |
taxonomyDefaultState: {}, |
| 55 |
}) |
| 56 |
useTaxonomyStore |
| 57 |
.getState() |
| 58 |
.fetchTaxonomies() |
| 59 |
.then(() => { |
| 60 |
useTemplatesStore.getState().setupDefaultTaxonomies() |
| 61 |
}) |
| 62 |
} |
| 63 |
|
| 64 |
if (!window.extendifyData.devbuild) return null |
| 65 |
|
| 66 |
return ( |
| 67 |
<section className="p-6 flex flex-col space-y-6 border-l-8 border-extendify-secondary"> |
| 68 |
<div> |
| 69 |
<p className="text-base m-0 text-extendify-black"> |
| 70 |
Development Settings |
| 71 |
</p> |
| 72 |
<p className="text-sm italic m-0 text-gray-500"> |
| 73 |
Only available on dev builds |
| 74 |
</p> |
| 75 |
</div> |
| 76 |
<div className="flex space-x-2"> |
| 77 |
<Button isSecondary onClick={handleServerSwitch}> |
| 78 |
Switch to {devMode ? 'Live' : 'Dev'} Server |
| 79 |
</Button> |
| 80 |
<Button isSecondary onClick={handleReset}> |
| 81 |
{processing |
| 82 |
? 'Processing...' |
| 83 |
: canHydrate |
| 84 |
? 'OK! Press to rehydrate app' |
| 85 |
: 'Reset User Data'} |
| 86 |
</Button> |
| 87 |
</div> |
| 88 |
</section> |
| 89 |
) |
| 90 |
} |
| 91 |
|