mirror of
https://github.com/muety/wakapi.git
synced 2023-08-10 21:12:56 +03:00
chore: move time picker to separate component
This commit is contained in:
parent
2bc53e6f11
commit
c4c62f31e4
@ -1,3 +1,9 @@
|
|||||||
|
// To use this, do the following:
|
||||||
|
// 1. Include petite-vue
|
||||||
|
// 2. Define variables timeSelection, fromDate, toDate in an inline script below previous
|
||||||
|
// 3. Include this script file below previous
|
||||||
|
// 4. Include time-picker.tpl.html template partial in body
|
||||||
|
|
||||||
PetiteVue.createApp({
|
PetiteVue.createApp({
|
||||||
$delimiters: ['${', '}'],
|
$delimiters: ['${', '}'],
|
||||||
state: {
|
state: {
|
||||||
@ -7,7 +13,7 @@ PetiteVue.createApp({
|
|||||||
toDate: toDate,
|
toDate: toDate,
|
||||||
timeSelection: timeSelection,
|
timeSelection: timeSelection,
|
||||||
onDateUpdated() {
|
onDateUpdated() {
|
||||||
formTimePicker.submit()
|
document.getElementById('time-picker-form').submit()
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
window.addEventListener('click', (e) => {
|
window.addEventListener('click', (e) => {
|
||||||
@ -21,4 +27,4 @@ PetiteVue.createApp({
|
|||||||
this.timeSelection = refEl ? refEl.innerText : 'Unknown'
|
this.timeSelection = refEl ? refEl.innerText : 'Unknown'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).mount('#summary-page')
|
}).mount('#time-picker-container')
|
@ -8,11 +8,8 @@
|
|||||||
const timeSelection = '{{ .From | datetime }} - {{ .To | ceildate | datetime }}'
|
const timeSelection = '{{ .From | datetime }} - {{ .To | ceildate | datetime }}'
|
||||||
const fromDate = '{{ .From | simpledate }}'
|
const fromDate = '{{ .From | simpledate }}'
|
||||||
const toDate = '{{ .To | ceildate | simpledate }}'
|
const toDate = '{{ .To | ceildate | simpledate }}'
|
||||||
|
|
||||||
// Elements
|
|
||||||
const formTimePicker = document.getElementById('time-picker-form')
|
|
||||||
</script>
|
</script>
|
||||||
<script type="module" src="assets/js/components/summary.js"></script>
|
<script type="module" src="assets/js/components/time-picker.js"></script>
|
||||||
|
|
||||||
<body class="relative bg-gray-900 text-gray-700 p-4 pt-10 flex flex-col min-h-screen max-w-screen-xl mx-auto justify-center">
|
<body class="relative bg-gray-900 text-gray-700 p-4 pt-10 flex flex-col min-h-screen max-w-screen-xl mx-auto justify-center">
|
||||||
|
|
||||||
@ -23,38 +20,7 @@
|
|||||||
{{ if .User.HasData }}
|
{{ if .User.HasData }}
|
||||||
|
|
||||||
<div class="flex justify-end mt-12 relative" id="summary-page" v-scope @vue:mounted="mounted">
|
<div class="flex justify-end mt-12 relative" id="summary-page" v-scope @vue:mounted="mounted">
|
||||||
<div class="menu-item flex items-center text-sm font-semibold space-x-2 rounded hover:bg-gray-850 py-2 px-4 cursor-pointer justify-end" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">
|
{{ template "time-picker.tpl.html" . }}
|
||||||
<span class="iconify inline text-2xl text-gray-400 flex-grow" data-icon="fa-regular:calendar-alt"></span>
|
|
||||||
<a v-cloak id="current-time-selection" class="text-gray-300 -mb-1">${timeSelection}</a>
|
|
||||||
<span class="iconify inline text-2xl text-gray-400" data-icon="akar-icons:chevron-down"></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-cloak v-show="state.showDropdownTimepicker" class="z-10 absolute top-0 right-0 popup mt-12 w-40" id="time-picker-dropdown">
|
|
||||||
<div class="flex-grow flex flex-col flex bg-gray-850 shadow-md rounded w-40 p-1 ">
|
|
||||||
<a id="time-option-today" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=today" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Today</a>
|
|
||||||
<a id="time-option-yesterday" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=yesterday" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Yesterday</a>
|
|
||||||
<a id="time-option-week" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=week" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">This Week</a>
|
|
||||||
<a id="time-option-month" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=month" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">This Month</a>
|
|
||||||
<a id="time-option-year" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=year" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">This Year</a>
|
|
||||||
<a id="time-option-last_7_days" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=last_7_days" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Past 7 Days</a>
|
|
||||||
<a id="time-option-last_30_days" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=last_30_days" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Past 30 Days</a>
|
|
||||||
<a id="time-option-last_12_months" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=last_12_months" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Past 12 Months</a>
|
|
||||||
<a id="time-option-any" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=any" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">All Time</a>
|
|
||||||
<hr class="my-2">
|
|
||||||
<form id="time-picker-form" class="flex flex-col space-y-1">
|
|
||||||
<div class="flex flex-col space-x-1 bg-gray-900 rounded p-1 border-2 border-gray-800">
|
|
||||||
<label for="from-date-picker" class="text-gray-500 text-xs ml-2">Start:</label>
|
|
||||||
<input v-model="fromDate" id="from-date-picker" type="date" name="from" max="{{ .ToTime.T | simpledate }}" class="text-sm text-gray-300 bg-gray-900 cursor-pointer"
|
|
||||||
required @input="onDateUpdated" data-trigger-for="showDropdownTimepicker">
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-col space-x-1 bg-gray-900 rounded p-1 border-2 border-gray-800">
|
|
||||||
<label for="to-date-picker" class="text-gray-500 text-xs ml-2">End:</label>
|
|
||||||
<input v-model="toDate" id="to-date-picker" type="date" name="to" min="{{ .FromTime.T | simpledate }}" class="text-sm text-gray-300 bg-gray-900 cursor-pointer"
|
|
||||||
required @input="onDateUpdated" data-trigger-for="showDropdownTimepicker">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
34
views/time-picker.tpl.html
Normal file
34
views/time-picker.tpl.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<div id="time-picker-container">
|
||||||
|
<div class="menu-item flex items-center text-sm font-semibold space-x-2 rounded hover:bg-gray-850 py-2 px-4 cursor-pointer justify-end" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">
|
||||||
|
<span class="iconify inline text-2xl text-gray-400 flex-grow" data-icon="fa-regular:calendar-alt"></span>
|
||||||
|
<a v-cloak id="current-time-selection" class="text-gray-300 -mb-1">${timeSelection}</a>
|
||||||
|
<span class="iconify inline text-2xl text-gray-400" data-icon="akar-icons:chevron-down"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-cloak v-show="state.showDropdownTimepicker" class="z-10 absolute top-0 right-0 popup mt-12 w-40" id="time-picker-dropdown">
|
||||||
|
<div class="flex-grow flex flex-col flex bg-gray-850 shadow-md rounded w-40 p-1 ">
|
||||||
|
<a id="time-option-today" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=today" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Today</a>
|
||||||
|
<a id="time-option-yesterday" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=yesterday" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Yesterday</a>
|
||||||
|
<a id="time-option-week" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=week" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">This Week</a>
|
||||||
|
<a id="time-option-month" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=month" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">This Month</a>
|
||||||
|
<a id="time-option-year" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=year" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">This Year</a>
|
||||||
|
<a id="time-option-last_7_days" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=last_7_days" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Past 7 Days</a>
|
||||||
|
<a id="time-option-last_30_days" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=last_30_days" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Past 30 Days</a>
|
||||||
|
<a id="time-option-last_12_months" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=last_12_months" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">Past 12 Months</a>
|
||||||
|
<a id="time-option-any" class="submenu-item hover:bg-gray-800 rounded p-1 text-right w-full text-gray-300 px-2 font-semibold text-sm" href="summary?interval=any" @click="state.showDropdownTimepicker = !state.showDropdownTimepicker" data-trigger-for="showDropdownTimepicker">All Time</a>
|
||||||
|
<hr class="my-2">
|
||||||
|
<form id="time-picker-form" class="flex flex-col space-y-1">
|
||||||
|
<div class="flex flex-col space-x-1 bg-gray-900 rounded p-1 border-2 border-gray-800">
|
||||||
|
<label for="from-date-picker" class="text-gray-500 text-xs ml-2">Start:</label>
|
||||||
|
<input v-model="fromDate" id="from-date-picker" type="date" name="from" max="{{ .ToTime.T | simpledate }}" class="text-sm text-gray-300 bg-gray-900 cursor-pointer"
|
||||||
|
required @input="onDateUpdated" data-trigger-for="showDropdownTimepicker">
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col space-x-1 bg-gray-900 rounded p-1 border-2 border-gray-800">
|
||||||
|
<label for="to-date-picker" class="text-gray-500 text-xs ml-2">End:</label>
|
||||||
|
<input v-model="toDate" id="to-date-picker" type="date" name="to" min="{{ .FromTime.T | simpledate }}" class="text-sm text-gray-300 bg-gray-900 cursor-pointer"
|
||||||
|
required @input="onDateUpdated" data-trigger-for="showDropdownTimepicker">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
Loading…
Reference in New Issue
Block a user