From 9f07a0897f8b8e050b2e236897964c576fd28d04 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Sat, 6 Nov 2021 01:50:05 +0300 Subject: [PATCH] Added an option to reset timers daily --- src/assets/cross.svg | 3 ++ src/assets/gear.svg | 4 +++ src/assets/pause.svg | 4 ++- src/assets/play.svg | 4 ++- src/assets/trash.svg | 5 ++- src/components/Modal.vue | 3 +- src/components/SettingsModal.vue | 53 +++++++++++++++++++++++++++++++ src/components/TheCategoryBar.vue | 41 ++++++++++++++++++++++-- src/scss/style.scss | 4 +++ src/store/index.js | 12 ++++++- src/views/Home/Index.vue | 13 ++++++++ src/views/Home/Task.vue | 2 +- vue.config.js | 3 ++ 13 files changed, 143 insertions(+), 8 deletions(-) create mode 100644 src/assets/cross.svg create mode 100644 src/assets/gear.svg create mode 100644 src/components/SettingsModal.vue diff --git a/src/assets/cross.svg b/src/assets/cross.svg new file mode 100644 index 0000000..c865d88 --- /dev/null +++ b/src/assets/cross.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/assets/gear.svg b/src/assets/gear.svg new file mode 100644 index 0000000..2d4e615 --- /dev/null +++ b/src/assets/gear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/assets/pause.svg b/src/assets/pause.svg index 5bb17c7..68285b2 100644 --- a/src/assets/pause.svg +++ b/src/assets/pause.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + \ No newline at end of file diff --git a/src/assets/play.svg b/src/assets/play.svg index c54977e..28f2e67 100644 --- a/src/assets/play.svg +++ b/src/assets/play.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + \ No newline at end of file diff --git a/src/assets/trash.svg b/src/assets/trash.svg index d341336..1931365 100644 --- a/src/assets/trash.svg +++ b/src/assets/trash.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + \ No newline at end of file diff --git a/src/components/Modal.vue b/src/components/Modal.vue index 651ab19..c526069 100644 --- a/src/components/Modal.vue +++ b/src/components/Modal.vue @@ -6,7 +6,7 @@ >
-
×
+
@@ -79,6 +79,7 @@ export default { width: 100%; bottom: 0; top: unset; + padding-bottom: 32px; box-sizing: border-box; border-radius: 16px 16px 0 0; transform: translate(0, 0); diff --git a/src/components/SettingsModal.vue b/src/components/SettingsModal.vue new file mode 100644 index 0000000..2360fb3 --- /dev/null +++ b/src/components/SettingsModal.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/components/TheCategoryBar.vue b/src/components/TheCategoryBar.vue index 368ef72..8354df1 100644 --- a/src/components/TheCategoryBar.vue +++ b/src/components/TheCategoryBar.vue @@ -19,9 +19,15 @@ @click="selectCategory(category)" > {{ category }} - × + + +
+ +
+ + @@ -29,7 +35,12 @@ import { mapState } from 'vuex'; import toColor from '@/stringToColor'; +import SettingsModal from './SettingsModal.vue'; + export default { + components: { + SettingsModal, + }, data() { return { newCategory: '+', @@ -68,6 +79,9 @@ export default { } this.$emit('select', this.selectedCategory); }, + openSettings() { + this.$refs.settingsModal.open(); + }, }, computed: { ...mapState({ @@ -89,6 +103,7 @@ export default { display: flex; align-items: center; padding: 0 64px; + box-sizing: border-box; .add-category { color: $darker; @@ -106,7 +121,7 @@ export default { .categories { display: flex; - margin-left: 32px; + margin: 0 32px; overflow-x: scroll; .category { @@ -118,11 +133,33 @@ export default { } } } + + .settings { + position: absolute; + right: 64px; + height: 32px; + width: 32px; + cursor: pointer; + + > * { + height: inherit; + } + } } @media screen and (max-width: $max-width) { .category-bar { padding: 0 0 0 8px; + + .categories { + margin-right: 0; + } + + .settings { + position: fixed; + bottom: 8px; + right: 8px; + } } } diff --git a/src/scss/style.scss b/src/scss/style.scss index d59b892..3a79d8a 100644 --- a/src/scss/style.scss +++ b/src/scss/style.scss @@ -30,6 +30,7 @@ .category { border-radius: 16px; + height: 1rem; padding: 6px 12px; cursor: pointer; display: flex; @@ -38,7 +39,10 @@ color: $darker; span { + width: 16px; + height: 16px; margin-left: 4px; + vertical-align: middle; } } } \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js index 7935760..a082c5d 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -10,7 +10,7 @@ export default createStore({ categories: [], tasks: [], midnightReset: false, - lastReset: undefined, + lastReset: new Date(), darkTheme: true, }, mutations: { @@ -77,6 +77,16 @@ export default createStore({ return newTask; }); }, + resetTasks(state) { + state.tasks = state.tasks.map((task) => { + const newTask = task; + newTask.running = false; + newTask.totalTime = 0; + newTask.startedAt = undefined; + return newTask; + }); + state.lastReset = new Date(); + }, setMidnightReset(state, value) { state.midnightReset = !!value; diff --git a/src/views/Home/Index.vue b/src/views/Home/Index.vue index aa71ba3..0a7cca5 100644 --- a/src/views/Home/Index.vue +++ b/src/views/Home/Index.vue @@ -6,6 +6,8 @@