enrecipes/app/components/modals/DMYPicker.vue
2021-06-18 18:22:03 +05:30

108 lines
2.6 KiB
Vue

<template>
<Page
@loaded="mLoad"
backgroundColor="transparent"
:class="theme"
>
<GridLayout rows="auto, auto, auto" class="modal">
<RLabel class="title" :text="title | L" />
<RStackLayout
:rtl="RTL"
row="1"
orientation="horizontal"
horizontalAlignment="center"
>
<ListPicker
@loaded="onLPLoad"
:items="days"
:selectedIndex="dIndex"
@selectedIndexChange="setD"
></ListPicker>
<ListPicker
@loaded="onLPLoad"
:items="months"
:selectedIndex="currentM"
@selectedIndexChange="setM"
></ListPicker>
<ListPicker
:items="years"
:selectedIndex="yIndex"
@selectedIndexChange="setY"
></ListPicker>
</RStackLayout>
<RGridLayout :rtl="RTL" row="2" columns="*, auto, auto" class="actions">
<Button
col="1"
class="text tb st fb"
:text="'cBtn' | L"
@tap="$modal.close(0)"
/>
<Button
col="2"
class="text tb st fb"
:text="'SET' | L"
@tap="$modal.close(selected)"
/>
</RGridLayout>
</GridLayout>
</Page>
</template>
<script>
import { mapState } from "vuex";
import { localize } from "@nativescript/localize";
export default {
props: ["title", "monthNames", "currentD", "currentM", "currentY"],
data() {
return {
selectedD: 0,
selectedM: 0,
selectedY: 0,
};
},
computed: {
...mapState(["icon", "theme", "RTL"]),
days() {
let ld = new Date(this.selectedY, this.selectedM + 1, 0).getDate();
return Array.from({ length: ld }, (v, i) => i + 1);
},
dIndex() {
return this.days.indexOf(this.selectedD || this.currentD);
},
months() {
return this.monthNames.map((e) => localize(e));
},
years() {
let min = 1900;
let max = min + 200;
let years = [];
for (let i = min; i <= max; i++) years.push(i);
return years;
},
yIndex() {
return this.years.indexOf(this.currentY);
},
selected() {
return {
date: this.selectedD,
month: this.selectedM,
year: this.selectedY,
};
},
},
methods: {
onLPLoad({ object }) {
object.android.setWrapSelectorWheel(true);
},
setD(args) {
this.selectedD = args.object.selectedIndex + 1;
},
setM(args) {
this.selectedM = args.object.selectedIndex;
},
setY(args) {
this.selectedY = this.years[args.object.selectedIndex];
},
},
};
</script>