|
|
@@ -3,7 +3,7 @@
|
|
|
<div class="scroll-wrapper">
|
|
|
<div class="scroll-track">
|
|
|
<q-card
|
|
|
- v-for="item in data"
|
|
|
+ v-for="item in visibleItems"
|
|
|
:key="item.id"
|
|
|
:flat="false"
|
|
|
class="today-card card-border shadow-card bg-surface"
|
|
|
@@ -218,36 +218,69 @@
|
|
|
import { avatarColors } from "src/helpers/avatarColors";
|
|
|
import { getFirstName } from "src/helpers/utils";
|
|
|
import { useQuasar } from "quasar";
|
|
|
+import { ref, onMounted, onBeforeUnmount, computed } from "vue";
|
|
|
|
|
|
import ProfileHelpDialog from "src/components/profile/ProfileHelpDialog.vue";
|
|
|
|
|
|
|
|
|
-defineProps({ data: { type: Array, default: () => [] } });
|
|
|
+const props = defineProps({
|
|
|
+ data: {
|
|
|
+ type: Array,
|
|
|
+ default: () => [],
|
|
|
+ },
|
|
|
+});
|
|
|
+
|
|
|
+
|
|
|
|
|
|
const emit = defineEmits(["rate"]);
|
|
|
|
|
|
const $q = useQuasar();
|
|
|
|
|
|
+const now = ref(Date.now());
|
|
|
+
|
|
|
+let timer = null;
|
|
|
+
|
|
|
const cardState = (item) => {
|
|
|
- switch (item.status) {
|
|
|
- case "finished":
|
|
|
- return "finished";
|
|
|
+ if (item.status === "cancelled") {
|
|
|
+ return "cancelled";
|
|
|
+ }
|
|
|
|
|
|
- case "started":
|
|
|
- return "in_progress";
|
|
|
+ if (item.client_reviewed) {
|
|
|
+ return "finished";
|
|
|
+ }
|
|
|
|
|
|
- case "accepted":
|
|
|
- case "paid":
|
|
|
- return "awaiting_code";
|
|
|
+ if (
|
|
|
+ item.status === "accepted" ||
|
|
|
+ item.status === "paid"
|
|
|
+ ) {
|
|
|
+ return "awaiting_code";
|
|
|
+ }
|
|
|
|
|
|
- case "cancelled":
|
|
|
- return "cancelled";
|
|
|
+ if (
|
|
|
+ item.status === "started" ||
|
|
|
+ item.status === "finished"
|
|
|
+ ) {
|
|
|
+ const [hours, minutes] = (item.end_time || "23:59")
|
|
|
+ .slice(0, 5)
|
|
|
+ .split(":")
|
|
|
+ .map(Number);
|
|
|
|
|
|
- default:
|
|
|
- return "awaiting_code";
|
|
|
+ const endTime = new Date();
|
|
|
+
|
|
|
+ endTime.setHours(hours, minutes, 0, 0);
|
|
|
+
|
|
|
+ return now.value >= endTime.getTime()
|
|
|
+ ? "finished"
|
|
|
+ : "in_progress";
|
|
|
}
|
|
|
+
|
|
|
+ return "awaiting_code";
|
|
|
};
|
|
|
|
|
|
+const visibleItems = computed(() => {
|
|
|
+ return props.data.filter((item) => !item.client_reviewed);
|
|
|
+});
|
|
|
+
|
|
|
const progressByState = (item) => {
|
|
|
const state = cardState(item);
|
|
|
|
|
|
@@ -262,6 +295,16 @@ const progressByState = (item) => {
|
|
|
const openHelp = () => {
|
|
|
$q.dialog({ component: ProfileHelpDialog });
|
|
|
};
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ timer = setInterval(() => {
|
|
|
+ now.value = Date.now();
|
|
|
+ }, 1000);
|
|
|
+});
|
|
|
+
|
|
|
+onBeforeUnmount(() => {
|
|
|
+ clearInterval(timer);
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|