11<script setup lang="ts">
22import type { FacebookJob } from " ../../../../../shared_types" ;
3- import RunningIcon from " ../../shared_components/RunningIcon .vue" ;
3+ import StatusComponent from " ../../shared_components/StatusComponent .vue" ;
44
55defineProps <{
66 jobs: FacebookJob [];
@@ -17,15 +17,6 @@ const emit = defineEmits([
1717 " onClickingEnabled" ,
1818]);
1919
20- const getStatusIcon = (status : string ) => {
21- const statusIcons: { [key : string ]: string } = {
22- pending: " fa-solid fa-ellipsis text-primary" ,
23- finished: " fa-solid fa-square-check text-success" ,
24- canceled: " fa-solid fa-circle-exclamation text-danger" ,
25- };
26- return statusIcons [status ] || " " ;
27- };
28-
2920const getJobTypeText = (jobType : string ) => {
3021 const jobTypeTexts: { [key : string ]: string } = {
3122 login: " Logging in" ,
@@ -38,86 +29,16 @@ const getJobTypeText = (jobType: string) => {
3829 </script >
3930
4031<template >
41- <div class =" job-status-list" >
42- <div
43- v-for =" job in jobs"
44- :key =" job.id ?? 0"
45- class =" job-status-item d-flex align-items-center"
46- >
47- <div class =" status-icon me-2" >
48- <i v-if =" job.status !== 'running'" :class =" getStatusIcon(job.status)" />
49- <i v-else-if =" isPaused" class =" fa-solid fa-pause" />
50- <RunningIcon v-else />
51- </div >
52- <div class =" job-type" >
53- {{ getJobTypeText(job.jobType) }}
54- </div >
55- </div >
56- <div class =" d-flex justify-content-center mt-2" >
57- <button
58- v-if =" !isPaused"
59- class =" btn btn-outline-secondary btn-sm"
60- @click =" emit('onPause')"
61- >
62- <i class =" fa-solid fa-pause" /> Pause
63- </button >
64- <button
65- v-if =" isPaused"
66- class =" btn btn-primary btn-sm"
67- @click =" emit('onResume')"
68- >
69- <i class =" fa-solid fa-play" /> Resume
70- </button >
71- <button
72- class =" btn btn-outline-danger btn-sm btn-cancel"
73- @click =" emit('onCancel')"
74- >
75- <i class =" fa-regular fa-circle-xmark" /> Cancel
76- </button >
77- </div >
78- <div class =" d-flex justify-content-center" >
79- <button class =" btn btn-link btn-sm" @click =" emit('onReportBug')" >
80- Report a Bug
81- </button >
82- </div >
83- <div class =" d-flex justify-content-center" >
84- <button
85- class =" btn btn-link btn-sm"
86- @click ="
87- clickingEnabled
88- ? emit('onClickingDisabled')
89- : emit('onClickingEnabled')
90- "
91- >
92- {{ clickingEnabled ? "Disable" : "Enable" }} Clicking in Browser
93- </button >
94- </div >
95- </div >
32+ <StatusComponent
33+ :jobs =" jobs"
34+ :get-job-type-text =" getJobTypeText"
35+ :is-paused =" isPaused"
36+ :clicking-enabled =" clickingEnabled"
37+ @on-pause =" emit('onPause')"
38+ @on-resume =" emit('onResume')"
39+ @on-cancel =" emit('onCancel')"
40+ @on-report-bug =" emit('onReportBug')"
41+ @on-clicking-enabled =" emit('onClickingEnabled')"
42+ @on-clicking-disabled =" emit('onClickingDisabled')"
43+ />
9644</template >
97-
98- <style scoped>
99- .job-status-list {
100- padding : 10px ;
101- }
102-
103- .job-status-item {
104- display : flex ;
105- align-items : center ;
106- }
107-
108- .status-icon {
109- width : 24px ;
110- height : 24px ;
111- display : flex ;
112- align-items : center ;
113- justify-content : center ;
114- }
115-
116- .job-type {
117- font-size : 16px ;
118- }
119-
120- .btn-cancel {
121- margin-left : 5px ;
122- }
123- </style >
0 commit comments