PluginProbe
Extendify / 0.10.2
Extendify v0.10.2
3.2.1 3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 0.6.0 All 127 releases
extendify / src / Assist / state / Tasks.js

Tasks.js in Extendify 0.10.2, at src/Assist/state/Tasks.js

63 lines 1.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { useEffect, useState } from '@wordpress/element'
2 import create from 'zustand'
3 import { devtools, persist } from 'zustand/middleware'
4 import { getTaskData, saveTaskData } from '../api/Tasks'
5
6 const state = (set, get) => ({
7 // These are tests the user is in progress of completing.
8 activeTests: [],
9 // these are tasks the user has already completed
10 completedTasks: [],
11 isCompleted(task) {
12 return get().completedTasks.includes(task)
13 },
14 completeTask(task) {
15 if (get().isCompleted(task)) {
16 return
17 }
18 set((state) => ({
19 completedTasks: [...state.completedTasks, task],
20 }))
21 },
22 uncompleteTask(task) {
23 set((state) => ({
24 completedTasks: state.completedTasks.filter((t) => t !== task),
25 }))
26 },
27 toggleCompleted(task) {
28 if (get().isCompleted(task)) {
29 get().uncompleteTask(task)
30 return
31 }
32 get().completeTask(task)
33 },
34 })
35
36 const storage = {
37 getItem: async () => JSON.stringify(await getTaskData()),
38 setItem: async (_, value) => await saveTaskData(value),
39 removeItem: () => undefined,
40 }
41
42 export const useTasksStore = create(
43 persist(devtools(state, { name: 'Extendify Assist Tasks' }), {
44 name: 'extendify-assist-tasks',
45 getStorage: () => storage,
46 }),
47 state,
48 )
49
50 /* Hook useful for when you need to wait on the async state to hydrate */
51 export const useTasksStoreReady = () => {
52 const [hydrated, setHydrated] = useState(useTasksStore.persist.hasHydrated)
53 useEffect(() => {
54 const unsubFinishHydration = useTasksStore.persist.onFinishHydration(
55 () => setHydrated(true),
56 )
57 return () => {
58 unsubFinishHydration()
59 }
60 }, [])
61 return hydrated
62 }
63