move user/next_door call to "store"
This commit is contained in:
		
							parent
							
								
									4fbdb94caa
								
							
						
					
					
						commit
						ca8df3ba10
					
				
					 5 changed files with 36 additions and 44 deletions
				
			
		| 
						 | 
					@ -4,10 +4,6 @@
 | 
				
			||||||
  <figure>
 | 
					  <figure>
 | 
				
			||||||
    <figcaption class="has-text-primary-dark">
 | 
					    <figcaption class="has-text-primary-dark">
 | 
				
			||||||
      {{ figure_caption }}
 | 
					      {{ figure_caption }}
 | 
				
			||||||
      <template v-if="next_door !== null">
 | 
					 | 
				
			||||||
        <br />
 | 
					 | 
				
			||||||
        Zeit zum nächsten Türchen: <CountDown :millis="next_door" />
 | 
					 | 
				
			||||||
      </template>
 | 
					 | 
				
			||||||
    </figcaption>
 | 
					    </figcaption>
 | 
				
			||||||
    <div class="image is-unselectable">
 | 
					    <div class="image is-unselectable">
 | 
				
			||||||
      <img :src="$advent22.api_url('user/background_image')" />
 | 
					      <img :src="$advent22.api_url('user/background_image')" />
 | 
				
			||||||
| 
						 | 
					@ -33,7 +29,6 @@ import { Door } from "@/lib/door";
 | 
				
			||||||
import { advent22Store } from "@/plugins/store";
 | 
					import { advent22Store } from "@/plugins/store";
 | 
				
			||||||
import { Options, Vue } from "vue-class-component";
 | 
					import { Options, Vue } from "vue-class-component";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import CountDown from "./CountDown.vue";
 | 
					 | 
				
			||||||
import MultiModal from "./MultiModal.vue";
 | 
					import MultiModal from "./MultiModal.vue";
 | 
				
			||||||
import BulmaButton from "./bulma/Button.vue";
 | 
					import BulmaButton from "./bulma/Button.vue";
 | 
				
			||||||
import CalendarDoor from "./calendar/CalendarDoor.vue";
 | 
					import CalendarDoor from "./calendar/CalendarDoor.vue";
 | 
				
			||||||
| 
						 | 
					@ -41,7 +36,6 @@ import ThouCanvas from "./calendar/ThouCanvas.vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Options({
 | 
					@Options({
 | 
				
			||||||
  components: {
 | 
					  components: {
 | 
				
			||||||
    CountDown,
 | 
					 | 
				
			||||||
    MultiModal,
 | 
					    MultiModal,
 | 
				
			||||||
    BulmaButton,
 | 
					    BulmaButton,
 | 
				
			||||||
    ThouCanvas,
 | 
					    ThouCanvas,
 | 
				
			||||||
| 
						 | 
					@ -58,14 +52,6 @@ export default class extends Vue {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private multi_modal?: MultiModal;
 | 
					  private multi_modal?: MultiModal;
 | 
				
			||||||
  public figure_caption = this.idle_caption;
 | 
					  public figure_caption = this.idle_caption;
 | 
				
			||||||
  public next_door: number | null = null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  public mounted(): void {
 | 
					 | 
				
			||||||
    this.$advent22
 | 
					 | 
				
			||||||
      .api_get<number | null>("user/next_door")
 | 
					 | 
				
			||||||
      .then((next_door) => (this.next_door = next_door))
 | 
					 | 
				
			||||||
      .catch(this.$advent22.alert_user_error);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public modal_handle(modal: MultiModal) {
 | 
					  public modal_handle(modal: MultiModal) {
 | 
				
			||||||
    this.multi_modal = modal;
 | 
					    this.multi_modal = modal;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ import { Options, Vue } from "vue-class-component";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Options({
 | 
					@Options({
 | 
				
			||||||
  props: {
 | 
					  props: {
 | 
				
			||||||
    millis: Number,
 | 
					    until: Number,
 | 
				
			||||||
    tick_time: {
 | 
					    tick_time: {
 | 
				
			||||||
      type: Number,
 | 
					      type: Number,
 | 
				
			||||||
      default: 200,
 | 
					      default: 200,
 | 
				
			||||||
| 
						 | 
					@ -16,18 +16,14 @@ import { Options, Vue } from "vue-class-component";
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export default class extends Vue {
 | 
					export default class extends Vue {
 | 
				
			||||||
  private millis!: number;
 | 
					  private until!: number;
 | 
				
			||||||
  private tick_time!: number;
 | 
					  private tick_time!: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private interval_id: number | null = null;
 | 
					  private interval_id: number | null = null;
 | 
				
			||||||
  public string_repr = "";
 | 
					  public string_repr = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private get target_date_ms(): number {
 | 
					 | 
				
			||||||
    return Date.now() + this.millis;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  private tick(): void {
 | 
					  private tick(): void {
 | 
				
			||||||
    const distance_ms = this.target_date_ms - Date.now();
 | 
					    const distance_ms = this.until - Date.now();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (distance_ms <= 0) {
 | 
					    if (distance_ms <= 0) {
 | 
				
			||||||
      this.string_repr = "Jetzt!";
 | 
					      this.string_repr = "Jetzt!";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,34 +1,32 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <Calendar :doors="doors" />
 | 
					  <Calendar :doors="doors" />
 | 
				
			||||||
  <hr />
 | 
					  <hr />
 | 
				
			||||||
  <div class="content">
 | 
					  <div class="content" v-html="store.site_config.content" />
 | 
				
			||||||
    <h3>Anleitung</h3>
 | 
					  <template v-if="store.next_door_target !== null">
 | 
				
			||||||
    <p>
 | 
					    <hr />
 | 
				
			||||||
      Hier findest Du für jedes Türchen des Adventskalenders ein kleines
 | 
					    <div class="content has-text-primary">
 | 
				
			||||||
      farbiges Bildchen. Diese werden automatisch am jeweiligen Tag anklickbar
 | 
					      Zeit zum nächsten Türchen: <CountDown :until="store.next_door_target" />
 | 
				
			||||||
      und zeigen Dir das neue jeweilige dahinter versteckte Bild.
 | 
					 | 
				
			||||||
    </p>
 | 
					 | 
				
			||||||
    <p>
 | 
					 | 
				
			||||||
      Welches Bildchen zu welchem Tag gehört, erfährst Du, indem Du Deine Maus
 | 
					 | 
				
			||||||
      darüber bewegst: Bei den bereits freigeschalteten Bildern wird angezeigt,
 | 
					 | 
				
			||||||
      um welchen Tag es sich handelt.
 | 
					 | 
				
			||||||
    </p>
 | 
					 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </template>
 | 
					  </template>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script lang="ts">
 | 
					<script lang="ts">
 | 
				
			||||||
import { DoorsSaved } from "@/lib/api";
 | 
					import { DoorsSaved } from "@/lib/api";
 | 
				
			||||||
import { Door } from "@/lib/door";
 | 
					import { Door } from "@/lib/door";
 | 
				
			||||||
 | 
					import { advent22Store } from "@/plugins/store";
 | 
				
			||||||
import { Options, Vue } from "vue-class-component";
 | 
					import { Options, Vue } from "vue-class-component";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Calendar from "./Calendar.vue";
 | 
					import Calendar from "./Calendar.vue";
 | 
				
			||||||
 | 
					import CountDown from "./CountDown.vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Options({
 | 
					@Options({
 | 
				
			||||||
  components: {
 | 
					  components: {
 | 
				
			||||||
    Calendar,
 | 
					    Calendar,
 | 
				
			||||||
 | 
					    CountDown,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export default class extends Vue {
 | 
					export default class extends Vue {
 | 
				
			||||||
 | 
					  public readonly store = advent22Store();
 | 
				
			||||||
  public doors: Door[] = [];
 | 
					  public doors: Door[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public mounted(): void {
 | 
					  public mounted(): void {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,8 +41,10 @@
 | 
				
			||||||
              <dd>{{ num_user_doors }}</dd>
 | 
					              <dd>{{ num_user_doors }}</dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              <dt>Zeit zum nächsten Türchen</dt>
 | 
					              <dt>Zeit zum nächsten Türchen</dt>
 | 
				
			||||||
              <dd v-if="next_door === null">Kein nächstes Türchen</dd>
 | 
					              <dd v-if="store.next_door_target === null">
 | 
				
			||||||
              <dd v-else><CountDown :millis="next_door" /></dd>
 | 
					                Kein nächstes Türchen
 | 
				
			||||||
 | 
					              </dd>
 | 
				
			||||||
 | 
					              <dd v-else><CountDown :until="store.next_door_target" /></dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              <dt>Erstes Türchen</dt>
 | 
					              <dt>Erstes Türchen</dt>
 | 
				
			||||||
              <dd>{{ fmt_puzzle_date("first") }}</dd>
 | 
					              <dd>{{ fmt_puzzle_date("first") }}</dd>
 | 
				
			||||||
| 
						 | 
					@ -160,6 +162,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script lang="ts">
 | 
					<script lang="ts">
 | 
				
			||||||
import { AdminConfigModel, Credentials, DoorsSaved } from "@/lib/api";
 | 
					import { AdminConfigModel, Credentials, DoorsSaved } from "@/lib/api";
 | 
				
			||||||
 | 
					import { advent22Store } from "@/plugins/store";
 | 
				
			||||||
import { DateTime } from "luxon";
 | 
					import { DateTime } from "luxon";
 | 
				
			||||||
import { Options, Vue } from "vue-class-component";
 | 
					import { Options, Vue } from "vue-class-component";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -175,6 +178,8 @@ import CountDown from "../CountDown.vue";
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export default class extends Vue {
 | 
					export default class extends Vue {
 | 
				
			||||||
 | 
					  public readonly store = advent22Store();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public admin_config_model: AdminConfigModel = {
 | 
					  public admin_config_model: AdminConfigModel = {
 | 
				
			||||||
    solution: {
 | 
					    solution: {
 | 
				
			||||||
      value: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
 | 
					      value: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
 | 
				
			||||||
| 
						 | 
					@ -213,7 +218,6 @@ export default class extends Vue {
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  public doors: DoorsSaved = [];
 | 
					  public doors: DoorsSaved = [];
 | 
				
			||||||
  public num_user_doors = 0;
 | 
					  public num_user_doors = 0;
 | 
				
			||||||
  public next_door: number | null = null;
 | 
					 | 
				
			||||||
  public dav_credentials: Credentials = ["", ""];
 | 
					  public dav_credentials: Credentials = ["", ""];
 | 
				
			||||||
  public ui_credentials: Credentials = ["", ""];
 | 
					  public ui_credentials: Credentials = ["", ""];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -229,13 +233,11 @@ export default class extends Vue {
 | 
				
			||||||
      this.$advent22.api_get<AdminConfigModel>("admin/config_model"),
 | 
					      this.$advent22.api_get<AdminConfigModel>("admin/config_model"),
 | 
				
			||||||
      this.$advent22.api_get<DoorsSaved>("admin/doors"),
 | 
					      this.$advent22.api_get<DoorsSaved>("admin/doors"),
 | 
				
			||||||
      this.$advent22.api_get<DoorsSaved>("user/doors"),
 | 
					      this.$advent22.api_get<DoorsSaved>("user/doors"),
 | 
				
			||||||
      this.$advent22.api_get<number | null>("user/next_door"),
 | 
					 | 
				
			||||||
    ])
 | 
					    ])
 | 
				
			||||||
      .then(([admin_config_model, doors, user_doors, next_door]) => {
 | 
					      .then(([admin_config_model, doors, user_doors]) => {
 | 
				
			||||||
        this.admin_config_model = admin_config_model;
 | 
					        this.admin_config_model = admin_config_model;
 | 
				
			||||||
        this.doors = doors;
 | 
					        this.doors = doors;
 | 
				
			||||||
        this.num_user_doors = user_doors.length;
 | 
					        this.num_user_doors = user_doors.length;
 | 
				
			||||||
        this.next_door = next_door;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ready();
 | 
					        ready();
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,7 @@ export const advent22Store = defineStore({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  state: () => ({
 | 
					  state: () => ({
 | 
				
			||||||
    api_creds: empty_creds(),
 | 
					    api_creds: empty_creds(),
 | 
				
			||||||
 | 
					    is_touch_device: check_touch_device(),
 | 
				
			||||||
    is_admin: false,
 | 
					    is_admin: false,
 | 
				
			||||||
    site_config: {
 | 
					    site_config: {
 | 
				
			||||||
      title: "Adventskalender",
 | 
					      title: "Adventskalender",
 | 
				
			||||||
| 
						 | 
					@ -18,7 +19,7 @@ export const advent22Store = defineStore({
 | 
				
			||||||
      content: "",
 | 
					      content: "",
 | 
				
			||||||
      footer: "",
 | 
					      footer: "",
 | 
				
			||||||
    } as SiteConfigModel,
 | 
					    } as SiteConfigModel,
 | 
				
			||||||
    is_touch_device: check_touch_device(),
 | 
					    next_door_target: null as number | null,
 | 
				
			||||||
  }),
 | 
					  }),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getters: {
 | 
					  getters: {
 | 
				
			||||||
| 
						 | 
					@ -44,10 +45,19 @@ export const advent22Store = defineStore({
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        .catch(() => {});
 | 
					        .catch(() => {});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      ADVENT22.api_get<SiteConfigModel>("user/site_config")
 | 
					      Promise.all([
 | 
				
			||||||
        .then((site_config) => {
 | 
					        ADVENT22.api_get<SiteConfigModel>("user/site_config"),
 | 
				
			||||||
          document.title = `${site_config.title} – ${site_config.subtitle}`;
 | 
					        ADVENT22.api_get<number | null>("user/next_door"),
 | 
				
			||||||
 | 
					      ])
 | 
				
			||||||
 | 
					        .then(([site_config, next_door]) => {
 | 
				
			||||||
 | 
					          document.title = site_config.title;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          if (site_config.subtitle !== "")
 | 
				
			||||||
 | 
					            document.title += " – " + site_config.subtitle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          this.site_config = site_config;
 | 
					          this.site_config = site_config;
 | 
				
			||||||
 | 
					          if (next_door !== null)
 | 
				
			||||||
 | 
					            this.next_door_target = Date.now() + next_door;
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        .catch(ADVENT22.alert_user_error);
 | 
					        .catch(ADVENT22.alert_user_error);
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue