|
@@ -1,27 +1,63 @@
|
|
|
-import React, { useRef, useEffect } from 'react'
|
|
|
|
|
|
|
+import React, { useRef, useEffect, useState } from 'react'
|
|
|
import './process-item.scss'
|
|
import './process-item.scss'
|
|
|
import { ProcessItemClass } from './process-item.js'
|
|
import { ProcessItemClass } from './process-item.js'
|
|
|
|
|
|
|
|
function ProcessItem({ processInfo, onRemove }) {
|
|
function ProcessItem({ processInfo, onRemove }) {
|
|
|
const processItemClass = useRef(null)
|
|
const processItemClass = useRef(null)
|
|
|
|
|
+ const [isRunning, setIsRunning] = useState(false)
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
if (!processItemClass.current) {
|
|
if (!processItemClass.current) {
|
|
|
processItemClass.current = new ProcessItemClass()
|
|
processItemClass.current = new ProcessItemClass()
|
|
|
- processItemClass.current.init(processInfo)
|
|
|
|
|
|
|
+ processItemClass.current.init(processInfo, setIsRunning)
|
|
|
}
|
|
}
|
|
|
}, [])
|
|
}, [])
|
|
|
|
|
|
|
|
|
|
+ const handleStartStop = () => {
|
|
|
|
|
+ if (isRunning) {
|
|
|
|
|
+ processItemClass.current?.stop()
|
|
|
|
|
+ setIsRunning(false)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ processItemClass.current?.start()
|
|
|
|
|
+ setIsRunning(true)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return (
|
|
return (
|
|
|
<div className="process-item-container">
|
|
<div className="process-item-container">
|
|
|
|
|
+
|
|
|
<div className="process-item-content-container">
|
|
<div className="process-item-content-container">
|
|
|
<div className="process-item-title">{processInfo.name}</div>
|
|
<div className="process-item-title">{processInfo.name}</div>
|
|
|
<div className="process-item-content">{processInfo.description}</div>
|
|
<div className="process-item-content">{processInfo.description}</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+
|
|
|
<div className="btn-area-container">
|
|
<div className="btn-area-container">
|
|
|
- <div className="start-btn" onClick={() => processItemClass.current?.start()}>Start</div>
|
|
|
|
|
- <div className="delete-btn" onClick={() => processItemClass.current?.delete()}>delete</div>
|
|
|
|
|
|
|
+ <div
|
|
|
|
|
+ className={`start-btn ${isRunning ? 'start-btn--running' : ''}`}
|
|
|
|
|
+ onClick={handleStartStop}
|
|
|
|
|
+ >
|
|
|
|
|
+ {isRunning ? (
|
|
|
|
|
+ <svg viewBox="0 0 24 24" fill="currentColor" width="100%" height="100%">
|
|
|
|
|
+ <rect x="6" y="4" width="4" height="16" rx="1"/>
|
|
|
|
|
+ <rect x="14" y="4" width="4" height="16" rx="1"/>
|
|
|
|
|
+ </svg>
|
|
|
|
|
+ ) : (
|
|
|
|
|
+ <svg viewBox="0 0 24 24" fill="currentColor" width="100%" height="100%">
|
|
|
|
|
+ <path d="M8 5v14l11-7z"/>
|
|
|
|
|
+ </svg>
|
|
|
|
|
+ )}
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+
|
|
|
|
|
+ <div className="delete-btn"
|
|
|
|
|
+ onClick={() => processItemClass.current?.delete()}
|
|
|
|
|
+ >
|
|
|
|
|
+ <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
|
|
+ <circle cx="12" cy="12" r="10" fill="#ff3b30"/>
|
|
|
|
|
+ <path d="M8 8l8 8M16 8l-8 8" stroke="#fff" strokeWidth="2" strokeLinecap="round"/>
|
|
|
|
|
+ </svg>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
</div>
|
|
</div>
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|