ywana-core8 0.0.838 → 0.0.840

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ywana-core8",
3
- "version": "0.0.838",
3
+ "version": "0.0.840",
4
4
  "description": "ywana-core8",
5
5
  "homepage": "https://ywana.github.io/workspace",
6
6
  "author": "Ernesto Roldan Garcia",
@@ -1,4 +1,4 @@
1
1
  export { Wizard, WizardContext } from './wizard'
2
- export { TaskContextProvider, TaskContext, TaskMonitor, TaskProgress } from './task'
2
+ export { TaskContextProvider, TaskContext, TaskMonitor, TaskProgress, TASK_STATES } from './task'
3
3
  export { UploadForm } from './upload'
4
4
  export * from './password'
@@ -30,6 +30,96 @@ import { TaskContext, TaskContextProvider, TaskMonitor, TASK_STATES } from "./ta
30
30
 
31
31
  **/
32
32
 
33
+ function Queue(name, taskContext) {
34
+
35
+ const tasks = []
36
+
37
+ function queueTaskWrapper(task, listener) {
38
+ return {
39
+ task,
40
+ listener: (task, taskContext) => {
41
+ if (task.percentage === 100) {
42
+ console.log("TASK COMPLETED: ", task);
43
+ taskContext.updateTask(Object.assign({}, task, { state: TASK_STATES.COMPLETED }));
44
+ if (listener) listener(task, taskContext);
45
+ taskContext.removeListener(task.id);
46
+
47
+ //
48
+ }
49
+ },
50
+ };
51
+ }
52
+
53
+ const queue = {
54
+ tasks,
55
+ name,
56
+ init: (task, listener) => {
57
+ const taskWrapper = queueTaskWrapper(task, listener);
58
+ taskWrapper.task.queue = name;
59
+ taskWrapper.task.percentage = 0;
60
+ taskWrapper.task.state = TASK_STATES.QUEUED;
61
+ tasks.push(taskWrapper);
62
+ return queue;
63
+ },
64
+ next: (task, listener) => {
65
+ const taskWrapper = queueTaskWrapper(task, listener);
66
+ taskWrapper.task.queue = name;
67
+ taskWrapper.task.percentage = 0;
68
+ taskWrapper.task.state = TASK_STATES.QUEUED;
69
+ tasks.push(taskWrapper);
70
+ return queue;
71
+ },
72
+ end: (task, listener) => {
73
+ const taskWrapper = queueTaskWrapper(task, listener);
74
+ taskWrapper.task.percentage = 0;
75
+ taskWrapper.task.state = TASK_STATES.QUEUED;
76
+ tasks.push(taskWrapper);
77
+ },
78
+ save: async () => {
79
+ let nextTaskId = null
80
+ for (let taskWrapper of tasks.reverse()) {
81
+ const { task, listener } = taskWrapper
82
+ task.next = nextTaskId
83
+ const createdTask = await taskContext.createTask(task, listener)
84
+ nextTaskId = createdTask.id
85
+ }
86
+ tasks.reverse()
87
+ },
88
+ start: async () => {
89
+ const taskWrapper = tasks[0]
90
+ if (!taskWrapper) return null;
91
+ const { task } = taskWrapper;
92
+ task.state = TASK_STATES.RUNNING;
93
+ taskContext.updateTask(task);
94
+ return task;
95
+ }
96
+ }
97
+ return queue
98
+ }
99
+
100
+ const QueueExample = (props) => {
101
+
102
+ function listener1(task, taskContext) {
103
+ console.log("LISTENER1: ", task)
104
+ }
105
+
106
+ const queue1 = Queue("Q1")
107
+
108
+ queue1.init({ name: "TASK1" }, listener1)
109
+ .next({ name: "TASK2" }, listener1)
110
+ .next({ name: "TASK3" }, listener1)
111
+ .end({ name: "TASK4" }, listener1)
112
+
113
+ console.log(queue1.tasks)
114
+
115
+ return (
116
+ <div>QUEUE EXAMPLE</div>
117
+ )
118
+ }
119
+
120
+
121
+
122
+
33
123
  const CreateTaskButton = (props) => {
34
124
 
35
125
  const taskContext = useContext(TaskContext)
@@ -37,19 +127,19 @@ const CreateTaskButton = (props) => {
37
127
  async function run() {
38
128
 
39
129
  const listener = async (task, taskContext) => {
40
-
130
+
41
131
  console.log("LISTENER FOR TASK: ", task)
42
-
132
+
43
133
  if (task.percentage === 100) {
44
134
  console.log("TASK COMPLETED: ", task)
45
135
  taskContext.updateTask(Object.assign({}, task, { state: TASK_STATES.COMPLETED }))
46
136
  taskContext.removeListener(task.id)
47
- } else {
137
+ } else {
48
138
  const percentage = task.percentage + 10 || 0
49
139
  const nextTask = Object.assign({}, task, { percentage })
50
140
  await taskContext.updateTask(nextTask)
51
141
  }
52
-
142
+
53
143
  }
54
144
 
55
145
  await taskContext.createTask({
@@ -76,7 +166,7 @@ const TaskTest = (props) => {
76
166
 
77
167
  return (
78
168
  <TaskContextProvider host="http://localhost:3000" frequency={1000}>
79
- <TaskMonitor editors={taskEditors} from="2023-10-21" frequency={2000}/>
169
+ <TaskMonitor editors={taskEditors} from="2023-10-21" frequency={2000} />
80
170
  <CreateTaskButton />
81
171
  </TaskContextProvider>
82
172
  )
@@ -19,6 +19,7 @@ export const TaskContextProvider = (props) => {
19
19
 
20
20
  useEffect(() => {
21
21
  const _interval = setInterval(async () => {
22
+ console.log("TASKS INTERVAL", listeners)
22
23
  const taskIDs = Object.keys(listeners)
23
24
  for (let i = 0; i < taskIDs.length; i++) {
24
25
  const taskID = taskIDs[i]
@@ -81,6 +82,11 @@ export const TaskContextProvider = (props) => {
81
82
  setListeners(next)
82
83
  }
83
84
 
85
+ function addListeners(newListeners) {
86
+ const next = { ...listeners, ...newListeners }
87
+ setListeners(next)
88
+ }
89
+
84
90
  function removeListener(taskID) {
85
91
  const next = { ...listeners }
86
92
  delete next[taskID]
@@ -95,6 +101,7 @@ export const TaskContextProvider = (props) => {
95
101
  removeTask,
96
102
  listeners,
97
103
  addListener,
104
+ addListeners,
98
105
  removeListener
99
106
  };
100
107
 
@@ -111,9 +118,11 @@ export const TaskContextProvider = (props) => {
111
118
  export const TASK_STATES = {
112
119
  "CREATED": "CREATED",
113
120
  "RUNNING": "RUNNING",
114
- "COMPLETED": "COMPPLETED",
121
+ "COMPLETED": "COMPLETED",
115
122
  "FAULTED": "FAULTED",
116
- "CANCELED": "CANCELED"
123
+ "CANCELED": "CANCELED",
124
+
125
+ "QUEUED": "QUEUED",
117
126
  }
118
127
 
119
128
  /**